テーブルがある場合、リーダーボードの最も効率的な 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 テーブル ORDER BY ポイント
ランク列の生成は、php など、使用している表示技術に関係なく、おそらく簡単です。ほとんどの SQL で実行できますが、構文は異なります。
結合を利用するソリューションは次のとおりです。
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 を参照してください。