0

如果我们有表,对排行榜最有效的 SQL 查询是什么:

[UserID], [Points]

我想让结果按点和排名列排序。

4

3 回答 3

2

在 SQL Server 2008 中,您可以使用排名函数

SELECT UserId,
       Points,
       RANK() OVER(ORDER BY Points DESC) AS Rank
FROM LeaderBoards
ORDER BY Points DESC

MySql 排名可能是这样的:

SELECT UserId,
       Points,
       @curRank := @curRank + 1 AS Rank
FROM LeaderBoards l, (SELECT @curRank := 0) r
ORDER BY Points DESC
于 2013-04-19T12:54:09.170 回答
1

查询应该是:

SELECT UserID, Points FROM table ORDER BY Points

在您使用的任何显示技术(即 php 等)中,生成排名列可能更容易。它可以在大多数 SQL 风格中完成,但语法会有所不同。

于 2013-04-19T12:56:04.520 回答
0

这是一个利用 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

于 2015-05-06T01:17:49.310 回答