mysql - How to find top 3 topper of each subject in given table -
id  - name - subject -  marks 1   - acb  - mat    -  90 2   - acb  - sci    -  80 3   - acb  - eng    -  90 4   - acb  -    -  96 5   - acb  - phy    -  70 6   - acb  - che    -  43 7   - xyz  - mat    -  90 8   - xyz  - sci    -  80 9   - xyz  - eng    -  90 10  - xyz  -    -  96 11  - xyz  - phy    -  70 13  - xyz  - che    -  43  etc ..... just want show 3 topper of each subject
abc - math - 90 xyz - math - 90 def - math - 80 etc 
you can using variables.
select t.* (select t.*,              (@rn := if(@s = subject, @rn + 1,                         if(@s := subject, 1, 1)                        )              ) rn       t cross join            (select @rn := 0, @s := '') params       order subject, marks desc      ) t  rn <= 3 order t.subject, t.rn; 
Comments
Post a Comment