문제
각 사용자의 이메일 활동 순위를 구하십시오. 이메일 활동 순위는 보낸 이메일의 총 수로 정의됩니다. 가장 많은 이메일을 보낸 사용자는 순위 1을 가지며, 그 다음 사용자는 순위 2를 가집니다. 사용자, 총 이메일 수, 그리고 그들의 활동 순위를 출력하십시오.
• 기록은 총 이메일 수를 기준으로 내림차순으로 먼저 정렬하십시오.
• 이메일 수가 같은 사용자는 사용자 이름을 기준으로 알파벳 순으로 정렬하십시오.
• 순위에는 이메일 수가 같은 경우에도 고유한 값을 반환하십시오 (즉, 고유한 순위).
테이블설명

예상결과

✏️ 풀이
SELECT from_user, COUNT(*) AS total_emails,
ROW_NUMBER() OVER(ORDER BY COUNT(*) DESC, from_user ASC)
FROM google_gmail_emails
GROUP BY 1
ORDER BY 2 DESC, 1 ASC;
1. 유저별 COUNT
2. 이메일 수, 사용자 이름 순으로 정렬
3. ROW_NUMBER()를 이용한 순번 지정
📚 개념정리
ROW_NUMBER() : MySQL에서 제공하는 윈도우 함수 중 하나로 결과 집합 내에서 각 행에 고유한 순번을 부여
순번은 기본적으로 결과 집합의 순서에 따라 할당
# 기본 사용법 #
SELECT
column1,
column2,
ROW_NUMBER() OVER (ORDER BY column1) AS row_num
FROM
your_table;
- 고유한 순번: ROW_NUMBER()는 각 행에 대해 고유한 순번을 반환. 동일한 값을 가진 행이라도 각 행에 대해 별도의 순번이 부여.
- OVER 절: ROW_NUMBER()는 반드시 OVER() 절과 함께 사용해야 하며, 이 절 내에서 결과 집합의 순서를 정의하는 ORDER BY 조건 지정 가능.
- 윈도우 함수: ROW_NUMBER()는 일반적인 GROUP BY와는 달리 집합 내 각 행에 대한 정보를 동시에 제공하므로, 그룹화 없이 개별 행을 다룰 수 있다.
'[코딩테스트] > [SQL]' 카테고리의 다른 글
[StrataScratch - SQL] (Medium) New Products (0) | 2025.05.08 |
---|---|
[StrataScratch - SQL] (Medium) Finding User Purchases (0) | 2025.05.06 |
[StrataScratch - SQL] (Medium) Users By Average Session Time (0) | 2025.05.05 |
[StrataScratch - SQL] (Easy) Unique Users Per Client Per Month (0) | 2025.05.02 |
[StrataScratch - SQL] (Easy) Most Lucrative Products (0) | 2025.04.30 |