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
반응형
'개발중 > sql' 카테고리의 다른 글
[mysql] 일, 주, 월, 년, 분기 통계 함수 🔊 🔊 🔊 (0) | 2022.10.24 |
---|---|
[MYSQL] 하위요소들 모두 구해주라 (0) | 2022.10.12 |
MYSQL 쿼리 활용 FIND_IN_SET (0) | 2022.05.23 |
스칼라 서브쿼리와 인덱스 뷰 성능 차이 알아보고 개선하기 !! 🚦 (0) | 2022.04.25 |
Scala Subquery 와 Left Outer Join 의 성능차이 (2) | 2022.03.25 |