OkBublewrap

Top 5 Artists 본문

개발/SQL

Top 5 Artists

옥뽁뽁 2025. 3. 8. 17:07

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