0
我有以下表格:獲取照片的排名在SQL
Photos [ PhotoID, CategoryID, ... ] PK [ PhotoID ]
Categories [ CategoryID, ... ] PK [ CategoryID ]
Votes [ PhotoID, UserID, ... ] PK [ PhotoID, UserID ]
一張照片屬於一個類別。一個類別可能包含許多照片。用戶可以在任何照片上投票一次。一張照片可以被許多用戶投票。
我想選擇照片的等級(通過統計它有多少張選票),並且在照片所屬類別的範圍內。
SELECT * FROM Votes WHERE 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_NUMBER()`)。 – 2010-12-23 09:19:55