이런 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
'분석 > 데이터분석' 카테고리의 다른 글
PostgreSQL : psql 명령어 정리 (0) | 2019.09.06 |
---|---|
PostgreSQL : generate series of date (일련의 날짜 만들기) (1) | 2019.09.06 |
PostgreSQL - DATEDIFF - Datetime Difference in Seconds, Days, Months, Weeks etc (0) | 2019.06.14 |
PostgreSQL : Schema Backup (0) | 2019.05.14 |
postgreSQL 날짜/시간 함수 (0) | 2019.03.19 |