2016-07-20 6 views
0

表の学生MySQLのクエリは、他の列に列やグループから最大3つの値をすることによって見つけること

Name Class Marks 
abc a 95 
zxc a 90 
ert a 85 
hjk a 80 
iur b 98 
iue b 96 
opi b 94 
ool b 90 

出力ここ

Name Class Marks 
abc a 95 
zxc a 90 
ert a 85 
iur b 98 
iue b 96 
opi b 94 

私たちが列クラスにグループに持ち、最大3を取得列のマークの値。簡単な方法は、変数を使用することである

+0

エミュレート 'ROW_NUMBER()(過剰) 'に示すようにチュートリアルhttp://www.mysqltutorial.org/mysql-row_number/ – Serg

+0

このコンテキストでrow_number()の概念を適用することができません。 –

+0

コンセプト: 'select * from(select *、row_number())(学生がrnとしてMarks descでクラス順にパーティションを作る)ttここでrn <= 3 ' – Serg

答えて

0

C、D、E、Fのような列クラスについて異なる値、G等がある可能性があり:

select s.* 
from (select s.*, 
      (@rn := if(@c = class, @rn + 1, 
         if(@c := class, 1, 1) 
         ) 
      ) as seqnum 
     from student s cross join 
      (select @c := '', @rn := 0) params 
     order by class, marks desc 
    ) s 
where seqnum <= 3; 
+0

Gordonさん、ありがとうございました。 –

関連する問題