Back-end/DataBase

SQL 통계_ 서브쿼리 Sub Query_ Rank 순위매기기

cheersHena 2018. 6. 20. 18:31
반응형


Rank 순위 매기기 


예제 쿼리 및 주석. 


SELECT *
FROM (
SELECT
c.prvn_name, c.distc_name, c.attrc_name, figure,
(CASE @name WHEN distc_name THEN @rownum:=@rownum+1
ELSE @rownum:=1
END) as rank,
//table b 에서 만든 name과 rownum값으로 rank 값 생성한다.
기준이 되는 이름이 앞의 값과 같다면 +1 씩, 그렇지 않으면 1 대입(순위 초기화)
@name:=distc_name as distc_name
FROM
(
SELECT p.prvn_name, d.distc_name, a.attrc_name, ROUND(SUM(f.native_cnt)) as figure
FROM province p
JOIN district d ON p.prvn_cd = d.prvn_cd
JOIN attraction a ON d.prvn_cd = a.prvn_cd AND d.distc_cd = a.distc_cd
JOIN figure f ON a.prvn_cd = f.prvn_cd AND a.distc_cd = f.distc_cd AND a.attrc_cd = f.attrc_cd
WHERE p.prvn_name = '경기도' AND SUBSTR(f.basis_date,1,4) = '2017'
GROUP BY a.attrc_cd, p.prvn_cd ,d.distc_cd
ORDER BY d.distc_cd, figure desc
) a,
(SELECT @ROWNUM:=0 AS rownum, @NAME = 'abc' AS name FROM dual) b
// rack값 생성위한 rownum, name 생성 및 초기화,
) c
WHERE rank=1;


반응형