0

MySQL で結果をランク付けするクエリがあります。

SET @rank := 0;
SELECT Name, Score, @rank := @rank + 1 
FROM Results 
ORDER BY Score

これは、平均スコアに基づいてランキングを作成しようとするまでは問題なく機能します。

SET @rank := 0;
SELECT Name, AVG(Score) as AvScore, @rank := @rank + 1 
FROM Results 
ORDER BY AvScore

これを実行すると、AVG のために 1 つのレコードだけが返されます。ただし、名前に GROUP BY を追加して、全員の平均を一覧表示できるようにすると、正しいランキングが台無しになります。

答えがおそらく目の前にあることはわかっていますが、よくわかりません。平均結果に基づいて各名前のランキングを出力するにはどうすればよいですか?

4

2 に答える 2

3

サブクエリを使用する必要があります。

SET @rank := 0;

SELECT a.name, 
       a.avscore, 
       @rank := @rank + 1 
FROM   (SELECT name, 
               Avg(score) AS AvScore 
        FROM   results 
        GROUP  BY name) a
ORDER  BY a.avscore 
于 2013-02-07T18:57:53.887 に答える
1

最初に注文してから、派生テーブルからランクを選択する必要があります。

SELECT Name, AvScore, @rank := @rank + 1
FROM (
    SELECT Name, AVG(AvScore) AS AvScore FROM Results 
    GROUP BY Name ORDER BY AVG(AvScore)
) t1, (SELECT @rank = 0) t2;
于 2013-02-07T19:02:54.183 に答える