[ MS SQL ] 그룹별 TOP 10 뽑는 쿼리

2024. 1. 16. 18:23DB/MS SQL

728x90
반응형

방문 시 기록되는 테이블이 있습니다.

TB_VISIT

방문일자 이름
2023-01-02 09:01:45.037 철수
2023-01-05 09:01:45.037 영희
2023-01-12 09:01:45.037 철수
2023-01-13 09:01:45.037 민수
2023-02-02 09:01:45.037 민수
2023-02-03 09:01:45.037 민수
2023-02-04 09:01:45.037 영희

 

 

월별 방문자 순위를 10위까지 뽑고 싶으면 다음과 같이 하면 됩니다.

SELECT *
FROM (SELECT LEFT(CONVERT(char(8), regtDate, 112), 6) Date, 
	     name, 
	     COUNT(*) Count, 
	     ROW_NUMBER() OVER (PARTITION BY LEFT(CONVERT(char(8), regtDate, 112), 6) ORDER BY Count(*) DESC) AS RankNo
	 FROM TB_VISIT
	 WHERE Convert(char(8), regDate, 112) BETWEEN '20230101' AND '20231231'
	 GROUP BY LEFT(CONVERT(char(8), regtDate, 112), 6), name) A
WHERE RankNo <= 10
ORDER BY Date, Count Desc

 

결과는 다음과 같습니다.

Date name Count RankNo
202301 철수 2 1
202301 민수 1 2
202301 영희 1 3
202302 민수 2 1
202302 영희 1 2

 

 

그룹별로 일정 개수만 출력하고 싶을 때 사용할 수 있습니다.

728x90
반응형