✔️ 문제
데이터베이스를 조회해 2012년 이후 출시된 게임들 중 둘 이상의 메이저 플랫폼 계열에 출시된 게임 이름을 출력하는 쿼리를 작성해주세요. 쿼리 결과에는 아래 컬럼만 포함되어 있어야 하고, 중복된 게임은 1번만 출력되어야 합니다.
- Sony: 'PS3', 'PS4', 'PSP', 'PSV'
- Nintendo: 'Wii', 'WiiU', 'DS', '3DS'
- Microsoft: 'X360', 'XONE'
✔️ LEVEL 3
📌 주요 요구사항
- 메이저 플랫폼 계열 구분
- 2012년 이후 출시된 게임만 조회
- 둘 이상의 메이저 플랫폼 계열에 출시된 게임만 출력
- 게임 이름 중복 제외
with m as (select g.name game_name, year, p.platform_id , p.name,
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'
else 'etc' end as platform
from games g left join platforms p on g.platform_id=p.platform_id
where year >= 2012 and platform in ('sony','Nintendo','Microsoft')
)
select DISTINCT game_name name
from m
group by game_name
having count(DISTINCT platform) >= 2
✍ 코드 해석
1. WITH m AS (...) 서브쿼리
- games 테이블과 platforms 테이블을 LEFT JOIN하여 platform_id를 기준으로 게임과 플랫폼 조인
- CASE WHEN 문을 사용하여 각 플랫폼을 Sony, Nintendo, Microsoft로 나누어 새로운 컬럼 생성
- WHERE 절을 통해 2012년 이후 출시된 게임, 메이저 플랫폼(Sony, Nintendo, Microsoft)에 해당하는 게임 필터링
2. 최종 데이터 필터링
- GROUP BY game_name을 사용하여 게임별로 그룹화
- HAVING COUNT(DISTINCT platform) >= 2 조건을 추가하여 두 개 이상의 메이저 플랫폼에서 출시된 게임만 필터링
- DISTINCT game_name을 적용하여 중복 제거 후 게임 이름 출력
📌 실행 결과
총 298개의 데이터가 출력되었다.
📌 정리
- 불필요한 플랫폼 데이터 제거: CASE WHEN 문을 통해 메이저 플랫폼만 남김
- 정확한 데이터 필터링: 2012년 이후 출시된 게임만 조회
- 중복 제거 및 그룹화: DISTINCT, GROUP BY, HAVING을 활용하여 중복된 게임 이름을 제거하고, 둘 이상의 메이저 플랫폼에 출시된 게임만 조회
'학습 > SQL' 카테고리의 다른 글
[solvesql] SQL 풀어보기 - 세 명이 서로 친구인 관계 찾기 (0) | 2025.03.05 |
---|---|
[solvesql] SQL 풀어보기 - 친구 수 집계하기 (0) | 2025.03.05 |
[solvesql] SQL 풀어보기 - 게임 개발사의 주력 플랫폼 찾기 (0) | 2025.03.04 |
[solvesql] SQL 풀어보기 - 온라인 쇼핑몰의 월 별 매출액 집계 (0) | 2025.03.03 |
[solvesql] SQL 풀어보기 - 전국 카페 주소 데이터 정제하기 (문자열 처리 함수 - SUBSTRING, INSTR 사용) (2) | 2025.03.02 |