# 링크
- solvesql Advent of SQL 2024: https://solvesql.com/collections/advent-of-sql-2024/
- 17일차 - 멀티 플랫폼 게임 찾기:https://solvesql.com/problems/multiplatform-games/
# 풀이
-- 2012년 이후 출시된 게임
WITH after_2012 AS (
SELECT
g.name AS game_name,
p.name AS platform_name
FROM games g
JOIN platforms p
ON g.platform_id = p.platform_id
WHERE g.year >= 2012
),
-- 메이저 플랫폼 계열에 출시된 게임
major_platform AS (
SELECT
game_name,
CASE
WHEN platform_name IN ('PS3', 'PS4', 'PSP', 'PSV') THEN 'Sony'
WHEN platform_name IN ('Wii', 'WiiU', 'DS', '3DS') THEN 'Nintendo'
WHEN platform_name IN ('X360', 'XONE') THEN 'Microsoft'
END AS platform_family
FROM after_2012
WHERE platform_family IS NOT NULL
)
-- 둘 이상의 메이저 플랫폼 계열에 출시된 게임, 중복 제거
SELECT DISTINCT
game_name AS name
FROM major_platform
GROUP BY name
HAVING COUNT(DISTINCT platform_family) >= 2;
- after_2012 CTE
- SELECT
- g.name AS game_name: games 테이블의 name 컬럼을 game_name으로 저장한다.
- p.name AS platform_name: platforms 테이블의 name 컬럼을 platform_name으로 저장한다.
- FROM games g: games 테이블의 별칭을 g로 설정하고, 해당 테이블에서 데이터를 가져온다.
- JOIN platforms p ON g.platform_id = p.platform_id: platforms 테이블의 별칭을 p로 설정하고, platform_id 컬럼을 기준으로 games 테이블과 platforms 테이블을 조인한다.
- WHERE g.year >= 2012: games 테이블의 year이 2012 이상인 데이터만 선택한다.
- SELECT
- major_platform CTE
- SELECT
- game_name: game_name 컬럼을 선택한다.
- CASE
- WHEN platform_name IN ('PS3', 'PS4', 'PSP', 'PSV') THEN 'Sony': platform_name이 'PS3', 'PS4', 'PSP', 'PSV' 중 하나일 경우 'Sony'로 분류한다.
- WHEN platform_name IN ('Wii', 'WiiU', 'DS', '3DS') THEN 'Nintendo': platform_name이 'Wii', 'WiiU', 'DS', '3DS' 중 하나일 경우 'Nintendo'로 분류한다.
- WHEN platform_name IN ('X360', 'XONE') THEN 'Microsoft': platform_name이 'X360', 'XONE' 중 하나일 경우 'Microsoft'로 분류한다.
- END AS platform_family: 해당 값을 platform_family로 저장한다.
- FROM after_2012: after_2012 CTE에서 데이터를 가져온다.
- WHERE platform_family IS NOT NULL: platform_family의 값이 NULL이 아닌 데이터만 선택한다.
- SELECT
- SELECT DISTINCT game_name AS name: game_name 컬럼의 고유값을 name으로 저장한다.
- FROM major_platform: major_platform CTE에서 데이터를 가져온다.
- GROUP BY name: name을 기준으로 그룹화한다.
- HAVING COUNT(DISTINCT platform_family) >= 2: platform_family의 고유값의 개수가 2 이상인 데이터만 선택한다.
728x90
'SQL > solvesql Advent of SQL 2024' 카테고리의 다른 글
[SQL] solvesql Advent of SQL 2024 19일차 (6) | 2024.12.20 |
---|---|
[SQL] solvesql Advent of SQL 2024 18일차 (0) | 2024.12.19 |
[SQL] solvesql Advent of SQL 2024 16일차 (0) | 2024.12.17 |
[SQL] solvesql Advent of SQL 2024 15일차 (2) | 2024.12.16 |
[SQL] solvesql Advent of SQL 2024 14일차 (2) | 2024.12.14 |