如果我们有表,对排行榜最有效的 SQL 查询是什么:
[UserID], [Points]
我想让结果按点和排名列排序。
如果我们有表,对排行榜最有效的 SQL 查询是什么:
[UserID], [Points]
我想让结果按点和排名列排序。
在 SQL Server 2008 中,您可以使用排名函数:
SELECT UserId,
Points,
RANK() OVER(ORDER BY Points DESC) AS Rank
FROM LeaderBoards
ORDER BY Points DESC
SELECT UserId,
Points,
@curRank := @curRank + 1 AS Rank
FROM LeaderBoards l, (SELECT @curRank := 0) r
ORDER BY Points DESC
查询应该是:
SELECT UserID, Points FROM table ORDER BY Points
在您使用的任何显示技术(即 php 等)中,生成排名列可能更容易。它可以在大多数 SQL 风格中完成,但语法会有所不同。
这是一个利用 join 的解决方案:
SELECT t1.UserID, t1.Points, COUNT(t2.Points) AS Rank
FROM LeaderBoards t1
JOIN LeaderBoards t2 ON t1.Points < t2.Points OR (t1.Points=t2.Points and t1.UserID = t2.UserID)
GROUP BY t1.UserID, t1.Points
ORDER BY t1.Points DESC, t1.UserID DESC;
我在 MySQL 上对此进行了测试。有关这方面的更详细文章,请参阅: http ://www.artfulsoftware.com/infotree/qrytip.php?id=460