sql - mysql - Get two greatest values from multiple columns -


we can use greatest greatest value multiple columns below

select greatest(mark1,mark2,mark3,mark4,mark5) best_mark marks 

but want 2 best marks all(5) marks.

can on mysql query?

table structure (i know wrong - created someone):

student_id  | name | mark1 | mark2 | mark3 | mark4 | mark5 

this not elegant solution if cannot alter table structure can unpivot data , apply user defined variable row number each student_id. code similar following:

select student_id, name, col, data (   select student_id, name, col,     data,     @rn:=case when student_id = @prev @rn else 0 end +1 rn,     @prev:=student_id      (     select student_id, name, col,       @rn,        @prev,       case s.col         when 'mark1' mark1         when 'mark2' mark2         when 'mark3' mark3         when 'mark4' mark4         when 'mark5' mark5       end data     marks     cross join      (       select 'mark1' col union        select 'mark2' union        select 'mark3' union        select 'mark4' union        select 'mark5'     ) s     cross join (select @rn := 0, @prev:=0) c   ) s   order student_id, data desc ) d rn <= 2 order student_id, data desc; 

see sql fiddle demo. return top 2 marks per student_id. inner subquery performing similar function using union unpivot not querying against table multiple times result.


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

java - Using an Integer ArrayList in Android -