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
- row_number
- MYSQL
- funnel
- 데이터분석
- 데이터리안
- Datarian
- 누적합
- 서브쿼리
- leetcode
- 린분석
- 그로스해킹
- advent of sql
- SolveSQL
- SQL
- dense_rank
- Retention
- python
- 프로그래머스
- pandas
- 신입 데이터분석가
- 취준
- 윈도우함수
- rank
- 퍼널분석
- 독서
- regexp
- LEFTJOIN
- 순위함수
- 리텐션
- 윈도우 함수
Archives
- Today
- Total
데이터 분석
[Day 17] solvesql | Advent of SQL 2024 | 멀티 플랫폼 게임 찾기 본문
멀티 플랫폼 게임 찾기
✔️0212 1116 복습
문제 조건
1. 2012년 이후 출시된 게임들 중 둘 이상의 메이저 플랫폼 계열에 출시된 게임 이름을 출력
2. 중복된 게임은 1번만 출력
메이저 플랫폼 계열:
- Sony: 'PS3', 'PS4', 'PSP', 'PSV'
- Nintendo: 'Wii', 'WiiU', 'DS', '3DS'
- Microsoft: 'X360', 'XONE'
Solution
-- 가장 최근 쿼리
WITH major_platforms AS (
-- 관심있는 플랫폼들만 필터링
SELECT *
FROM platforms
WHERE name IN ('PS3','PS4','PSP','PSV','Wii','WiiU','DS','3DS','X360','XONE')
), major_games AS (
-- 그중 경우에 따른 플랫폼 분류 & 2012년 이후 출시된 게임
SELECT g.name
, CASE WHEN p.name IN ('PS3','PS4','PSP','PSV') THEN 'Sony'
WHEN p.name IN ('Wii','WiiU','DS','3DS') THEN 'Nintendo'
ELSE 'Microsoft'
END AS major
FROM games g
JOIN major_platforms p ON g.platform_id = p.platform_id
WHERE g.year >= 2012
)
-- 둘 이상의 메이저 플랫폼 계열에 출시된 게임 출력
SELECT name
FROM major_games
GROUP BY name
HAVING COUNT(DISTINCT major) > 1
WITH T1 AS (
SELECT *,
CASE WHEN name IN ('PS3', 'PS4', 'PSP', 'PSV') THEN 'Sony'
WHEN name IN ('Wii', 'WiiU', 'DS', '3DS') THEN 'Nintendo'
WHEN name IN ('X360', 'XONE') THEN 'Microsoft'
ELSE 'Others' END as target
FROM platforms
)
SELECT DISTINCT g.name
FROM games g
JOIN T1 t ON g.platform_id = t.platform_id
WHERE g.year >= 2012 AND t.target IN ('Sony', 'Nintendo', 'Microsoft')
GROUP BY g.name
HAVING COUNT(DISTINCT target) >= 2
/*
XONE -> XOne 오타, 문제 수정 필요해보임 -> 반영된 듯
*/
WITH step1 AS (
SELECT g.name
, g.platform_id
, p.name AS p_name
, CASE WHEN p.name IN ('PS3', 'PS4', 'PSP', 'PSV') THEN 'Sony'
WHEN p.name IN ('Wii', 'WiiU', 'DS', '3DS') THEN 'Nintendo'
ELSE 'Microsoft'
END AS is_major -- 메이저 플랫폼 컬럼 가공
FROM games g
JOIN ( -- 관심있는 플랫폼만 부분 JOIN할게~
SELECT *
FROM platforms
WHERE name IN ('PS3', 'PS4', 'PSP', 'PSV', 'Wii', 'WiiU', 'DS', '3DS', 'X360', 'XONE')
) p ON g.platform_id = p.platform_id
WHERE g.year >= 2012
)
SELECT name
FROM step1
-- WHERE name = '7 Days to Die' -- 'XOne' 플랫폼에 속한 애들 개수때문에 정답 처리가 안됐던 것
GROUP BY name
HAVING COUNT(DISTINCT is_major) >= 2 -- 둘 이상의 메이저 플랫폼에 속하는 조건
▶ T1 CTE:
CASE문을 사용하여 메이저 플랫폼 계열에 속하는 플랫폼을 매핑
▶ 최종 SELECT:
2012년 이후 출시된 게임 중 둘 이상의 메이저 플랫폼 계열에 출시된 게임 이름을 추출
강사님
SELECT name
FROM (
SELECT g.name
, COUNT(DISTINCT CASE
WHEN p.name IN ('PS3', 'PS4', 'PSP', 'PSV') THEN 'Sony'
WHEN p.name IN ('Wii', 'WiiU', 'DS', '3DS') THEN 'Nintendo'
WHEN p.name IN ('X360', 'XONE') THEN 'Microsoft'
END) AS cnt -- 나머지는 null로 두겠네
-- , p.name
FROM games g
JOIN platforms p ON g.platform_id = p.platform_id
WHERE g.year >= 2012
GROUP BY g.name
HAVING cnt > 1
) AS t'SQL > solvesql' 카테고리의 다른 글
| [Day 19] solvesql | Advent of SQL 2024 | 전국 카페 주소 데이터 정제하기💡 (3) | 2024.12.19 |
|---|---|
| [Day 18] solvesql | Advent of SQL 2024 | 펭귄 날개와 몸무게의 상관 계수 (1) | 2024.12.18 |
| [Day 16] solvesql | Advent of SQL 2024 | 스테디셀러 작가 찾기🔥 (3) | 2024.12.17 |
| [Day 15] solvesql | Advent of SQL 2024 | 폐쇄할 따릉이 정류소 찾기 2⭐🔥(논리) (1) | 2024.12.17 |
| [Day 14] solvesql | Advent of SQL 2024 | 전력 소비량 이동 평균 구하기💡 (2) | 2024.12.14 |