SQL
SQL 순위 매기기 :
seonghojang
2023. 3. 10. 11:24
RANK() OVER([PARTITION BY COL_NAME_1] ORDER BY COL_NAME_2 [DESC])
1) RANK() OVER (ORDER BY COL_NAME DESC)
COL_NAME을 기준으로 순위를 매기는 함수
SELECT [주요모델], [Company Code2], RANK() OVER(ORDER BY [매출] DESC) AS [순위]
FROM
(
SELECT [중지역]
,[Company Code2]
,[주요모델]
,SUM([HHP수량]) AS [수량]
,SUM([달러매출]) AS [매출]
FROM [약식판연DB].[dbo].[23년 2적]
WHERE [관리미츠] = 'Smart' AND [중지역] = '구주'
GROUP BY [중지역]
,[Company Code2]
,[주요모델]
) AS A
이 쿼리를 돌리면 이렇게 [주요모델+법인명] 기준으로 매출 순위가 나온다.
여기에 추가 조건으로 PARTITION BY를 넣게 되면,
이걸 다시 법인명 기준으로 나눠서 순위를 보여준다.
즉 PARTITION BY는 쿼리 결과를 그룹으로 묶어서 보여주는 셈
둘 다 엑셀의 피벗만으로 똑같이 구현하기는 어려운 쿼리인데,
1번이 조금 더 신선한 느낌이다. 아직 저렇게 데이터를 뽑은 적은 없었으나...
참고 글
RANK() OVER(ORDER BY))에 대해
[MYSQL] RANK/DENSE_RANK/ROW_NUMBER 함수
RANK/DENSE_RANK/ROW_NUMBER 함수는 모두 특정 열의 값에 대해 순위를 매기는 함수다. 서식은 다음과 같다 RANK() OVER([PARTITION BY COL_NAME_1] ORDER BY COL_NAME_2 [DESC]) RANK대신 DENSE_RANK/ROW_NUMBER로 대치해서 사용할
satisfactoryplace.tistory.com
PARTITION BY에 대해
[SQL] SUM OVER PARTITON BY
GROUP BY절 없이 집계함수 사용하기
velog.io