1

私のテーブルは

ここに画像の説明を入力

ページの各セクションの上位 3 つのマークを表示したいのですが、上位 3 つのマークに類似したマークが表示された場合は、その重複したマークもマークの降順に表示したいと考えています。次のコードを使用しています。

SELECT Name, Marks FROM mytable AS t1 
INNER JOIN (SELECT DISTINCT(Marks) AS best_marks FROM mytable ORDER BY Marks DESC LIMIT 3) AS t2 ON t1.Marks = t2.best_marks ORDER BY Marks DESC, Name ASC;

だから私の最終的なアウトプットのルックスは、

ここに画像の説明を入力

助けてください...私は解決策に苦労しています。

4

1 に答える 1

2

group_concat()とを使って上位3点を取る裏技substring_index()です。アイデアは、リストの上位 3 つを取得することです。次に、find_in_set()そのリストに一致させるために使用します。

select name, marks
from mytable t1 join
     (select section, substring_index(group_concat(distinct Marks order by Marks desc), ',', 3) as Marks3
      from mytable
      group by section
     ) tsum
     on t1.section = tsum.section and
        find_in_set(t1.Marks, tsum.Marks3) > 0
ORDER BY Marks DESC, Name ASC;

これは、コードが構文的に正しいことを示す SQLFiddle です

于 2013-07-25T02:42:11.997 に答える