# 링크
- solvesql Advent of SQL 2024: https://solvesql.com/collections/advent-of-sql-2024/
- 13일차 - 게임 개발사의 주력 플랫폼 찾기: https://solvesql.com/problems/main-platform-of-game-developers/
# 풀이
WITH PlatformSales AS (
SELECT
c.name AS developer,
p.name AS platform,
SUM(g.sales_na + g.sales_eu + g.sales_jp + g.sales_other) AS total_sales
FROM games g
JOIN companies c
ON g.developer_id = c.company_id
JOIN platforms p
ON g.platform_id = p.platform_id
GROUP BY developer, platform
),
MaxSales AS (
SELECT
developer,
MAX(total_sales) AS max_sales
FROM PlatformSales
GROUP BY developer
)
SELECT
ps.developer,
ps.platform,
ps.total_sales AS sales
FROM PlatformSales ps
JOIN MaxSales ms
ON ps.developer = ms.developer
AND ps.total_sales = ms.max_sales
- PlatformSales CTE
- SELECT
- c.name AS developer: companies 테이블의 name 컬럼을 선택하고, developer로 저장한다.
- p.name AS platform: platforms 테이블의 name 컬럼을 선택하고, platform으로 저장한다.
- SUM(g.sales_na + g.sales_eu + g.sales_jp + g.sales_other) AS total_sales: games 테이블의 sales_na, sales_eu, sales_jp, sales_other 컬럼을 모두 더하고, total_sales로 저장한다.
- FROM games g: games 테이블의 별칭을 g로 설정하고, 해당 테이블에서 데이터를 불러온다.
- JOIN companies c ON g.developer_id = c.company_id: companies 테이블의 별칭을 c로 설정하고, games 테이블의 developer_id와 companies 테이블의 company_id를 기준으로 games 테이블과 companies 테이블을 조인한다.
- JOIN platforms p ON g.platform_id = p.platform_id: platforms 테이블의 별칭을 p로 설정하고, games 테이블의 platform_id와 platforms 테이블의 platform_id를 기준으로 games 테이블과 platforms 테이블을 조인한다.
- GROUP BY developer, platform: developer와 platform을 기준으로 그룹화한다.
- SELECT
- MaxSales CTE
- SELECT
- developer: developer 컬럼을 선택한다.
- MAX(total_sales) AS max_sales: total_sales의 최댓값을 계산하여 max_sales로 저장한다.
- FROM PlatformSales: PlatformSales 테이블에서 데이터를 불러온다.
- GROUP BY developer: developer를 기준으로 그룹화한다.
- SELECT
- SELECT
- ps.developer: PlatformSales 테이블의 developer 컬럼을 선택한다.
- ps.platform: PlatformSales 테이블의 platform 컬럼을 선택한다.
- ps.total_sales AS sales: PlatformSales 테이블의 total_sales 컬럼을 sales로 저장한다.
- FROM PlatformSales ps: PlatformSales 테이블의 별칭을 ps로 설정하고, 해당 테이블에서 데이터를 불러온다.
- JOIN MaxSales ms ON ps.developer = ms.developer AND ps.total_sales = ms.max_sales: MaxSales 테이블의 별칭을 ms로 설정하고, PlatformSales 테이블과 MaxSales 테이블의 developer, PlatformSales 테이블의 total_sales와 MaxSales 테이블의 max_sales를 기준으로 PlatformSales 테이블과 MaxSales 테이블을 조인한다.
728x90
'SQL > solvesql Advent of SQL 2024' 카테고리의 다른 글
[SQL] solvesql Advent of SQL 2024 15일차 (2) | 2024.12.16 |
---|---|
[SQL] solvesql Advent of SQL 2024 14일차 (2) | 2024.12.14 |
[SQL] solvesql Advent of SQL 2024 12일차 (0) | 2024.12.12 |
[SQL] solvesql Advent of SQL 2024 11일차 (0) | 2024.12.11 |
[SQL] solvesql Advent of SQL 2024 10일차 (0) | 2024.12.10 |