본문 바로가기

개발중/sql

Mysql5 에서 rownum 과 그룹별 rownum

728x90
반응형

 

이런 table이 있다고 가정하자

 

name : scores

column : class, name, score

 

class (반), name(학생이름), score(점수)

 

하고자 하는 작업은 각 반별로 상위 점수 3명을 구하는 것이다.

 

1. rownum

mysql에서는 rownum을 제공하지 않기 때문에 다음과 같이 해서 구할 수 있다.

select class, name, score, @rownum:=@rownum+1 as rownum
from scores, (select @rownum:=0) r 

 

2. rownum by group : 그룹별로 rownum을 만들어 보자 

-- group 별 rownum
select 	class, name, score
		, case when @grp = class then @rownum:=@rownum + 1 else @rownum :=1 end as rownum
        , (@grp := class) as dum
from scores, (select @rownum:=0, @grp:='') r 
order by class, score desc 

-- class 별로 상위 top 3명 
select a.class, a.name, a.score
from (
  select 	class, name, score
          , case when @grp = class then @rownum:=@rownum + 1 else @rownum :=1 end as rownum
          , (@grp := class) as dum
  from scores, (select @rownum:=0, @grp:='') r 
  order by class, score desc 
  ) a 
 where rownum < 4

 

 


 

728x90
반응형