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