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 テーブル ORDER BY ポイント

ランク列の生成は、php など、使用している表示技術に関係なく、おそらく簡単です。ほとんどの SQL で実行できますが、構文は異なります。

于 2013-04-19T12:56:04.520 に答える
0

結合を利用するソリューションは次のとおりです。

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 に答える