Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获取照片在SQL中的排名_Sql Server - Fatal编程技术网

Sql server 获取照片在SQL中的排名

Sql server 获取照片在SQL中的排名,sql-server,Sql Server,我有以下表格: Photos [ PhotoID, CategoryID, ... ] PK [ PhotoID ] Categories [ CategoryID, ... ] PK [ CategoryID ] Votes [ PhotoID, UserID, ... ] PK [ PhotoID, UserID ] 照片属于一类。一个类别可能包含许多照片。用户可以对任何照片进行一次投票。一张照片可以由许多用户投票选出 我想选择一张照片的排名(通过计算它拥有多少选票),包括整体排名和该照片

我有以下表格:

Photos [ PhotoID, CategoryID, ... ] PK [ PhotoID ]
Categories [ CategoryID, ... ] PK [ CategoryID ]
Votes [ PhotoID, UserID, ... ] PK [ PhotoID, UserID ]
照片属于一类。一个类别可能包含许多照片。用户可以对任何照片进行一次投票。一张照片可以由许多用户投票选出

我想选择一张照片的排名(通过计算它拥有多少选票),包括整体排名和该照片所属类别的排名

从投票中选择*的计数,其中PhotoID=@PhotoID是照片的投票数。我希望生成的表生成了总体排名和类别内排名的列,这样我就可以按任意一种顺序排列结果

例如,查询的结果表应该如下所示:

PhotoID    VoteCount      RankOverall     RankInCategory
1          48             1               7
3          45             2               5
19         33             3               1
2          17             4               3
7          9              5               5
...
…你明白了。我怎样才能做到这一点?到目前为止,我有以下查询来检索投票计数,但我还需要生成排名:

SELECT     PhotoID, UserID, CategoryID, DateUploaded,
                          (SELECT     COUNT(CommentID) AS Expr1
                            FROM          dbo.Comments
                            WHERE      (PhotoID = dbo.Photos.PhotoID)) AS CommentCount,
                          (SELECT     COUNT(PhotoID) AS Expr1
                            FROM          dbo.PhotoVotes
                            WHERE      (PhotoID = dbo.Photos.PhotoID)) AS VoteCount, Comments
FROM         dbo.Photos

看一看类似(也许)的东西


太棒了,谢谢。我不知道SQL Server有一个类似于
RANK()
的函数,它将相等的项目排列为相同的级别(与
ROW\u NUMBER()
相反)。
SELECT  p.PhotoID,
        ISNULL(v.CountVotes,0) CountVotes,
        RANK() OVER(ORDER BY ISNULL(v.CountVotes,0) DESC) RankInCategory,
        RANK() OVER(PARTITION BY p.CategoryID ORDER BY ISNULL(v.CountVotes,0) DESC) RankInCategory
FROM    Photos p LEFT JOIN 
        (
            SELECT  PhotoID,
                    COUNT(PhotoID) CountVotes
            FROM    Votes v 
            GROUP BY    PhotoID
        ) v ON  v.PhotoID = p.PhotoID