Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- wil
- R
- 스파르타 코딩
- 내일배움캠프
- 미세먼지
- 파이썬 철저입문
- 스파르타
- 파이썬 머신러닝 완벽 가이드
- 내일배움카드
- 중회귀모형
- 스파르타코딩
- Cluster
- SQL
- 웹 스크랩핑
- TiL
- 실전 데이터 분석 프로젝트
- 프로그래머스
- 파이썬 완벽 가이드
- 파이썬 철저 입문
- 파이썬 머신러닝 완벽가이드
- harkerrank
- 회귀분석
- MySQL
- 오블완
- hackerrank
- 파이썬
- 내일배움
- 프로젝트
- 텍스트 분석
- 티스토리챌린지
Archives
- Today
- Total
OkBublewrap
Top 5 Artists 본문
Top 5 Artists
문제
1. 글로벌 차트 Top 10에 가장 많이 등장한 아티스트 5명
2. 아티스트의 이름과 노래가 Top 10에 오른 횟수를 기준으로 한 순위 출력
3. 같은 기록 같은 순위 연속적 순위
4. 아티스트 이름으로 오름차순
풀이
SELECT artist_name, artist_rank
FROM
(
SELECT *,
DENSE_RANK() OVER (ORDER BY cnt DESC) AS artist_rank
FROM
(
SELECT a.artist_name, COUNT(*) AS cnt
FROM songs s1
INNER JOIN global_song_rank gs ON s1.song_id = gs.song_id
INNER JOIN artists a ON s1.artist_id = a.artist_id
WHERE gs.rank <= 10
GROUP BY a.artist_name
) sub1
) sub2
WHERE artist_rank <= 5
ORDER BY artist_rank ASC, artist_name ASC
1️⃣ Sub1: 세 테이블 join 하고 10위권 안에 들어간 artist_name 나온 수 구하기
2️⃣ Sub2: 집계된 것으로 순위
3️⃣ artist_rank: 5위 안 - 조건1
4️⃣ artist_rank 오름차순, artist_name 오름차순
문제에는 artist_name 오름차순 정렬이라 되있음
하지만 정답은 artist_name 정렬을 뺀, order by artist_rank 오름차순 까지하니 정답이됨
서브쿼리 하나로만 써도 될 듯
SELECT artist_name, artist_rank
FROM
(
SELECT a.artist_name, DENSE_RANK() OVER (ORDER BY COUNT(*) DESC) AS artist_rank
FROM songs s1
INNER JOIN global_song_rank gs ON s1.song_id = gs.song_id
INNER JOIN artists a ON s1.artist_id = a.artist_id
WHERE gs.rank <= 10
GROUP BY a.artist_name
) sub1
WHERE artist_rank <= 5
ORDER BY artist_rank ASC, artist_name ASC
'개발 > SQL' 카테고리의 다른 글
Cities With Completed Trades (0) | 2025.03.09 |
---|---|
Duplicate Job Listings (0) | 2025.03.09 |
Top Three Salaries (0) | 2025.03.08 |
Highest-Grossing Items (0) | 2025.03.08 |
Highest-Grossing Items (0) | 2025.03.08 |