데이터 분석

[Day 6] solvesql | Advent of SQL 2024 | 게임을 10개 이상 발매한 퍼블리셔 찾기 본문

SQL/solvesql

[Day 6] solvesql | Advent of SQL 2024 | 게임을 10개 이상 발매한 퍼블리셔 찾기

딱한아이 2024. 12. 6. 16:24
게임을 10개 이상 발매한 퍼블리셔 찾기

 

문제 조건

1. 퍼블리셔로 참여한 게임이 10개 이상인 회사의 이름 출력

 

Solution
# (1)
SELECT c.name
FROM games g
  INNER JOIN companies c ON g.publisher_id = c.company_id
GROUP BY g.publisher_id
HAVING COUNT(*) >= 10

# (2)
/* 다중행 서브쿼리를 활용
SELECT name
FROM companies
WHERE company_id IN (
  SELECT publisher_id
  FROM games
  GROUP BY publisher_id
  HAVING COUNT(*) >= 10
)
*/

# (3)
/* (2)와 유사하지만, IN절이 아닌 JOIN
WITH step1 AS (
  SELECT publisher_id
  FROM games
  GROUP BY publisher_id
  HAVING COUNT(*) >= 10
)
SELECT c.name 
FROM step1 s 
  JOIN companies c ON s.publisher_id = c.company_id
  */

 

(1)
games 테이블과 companies 테이블을 INNER JOIN하여 게임 배급사로 참여한 게임이 10개 이상인 회사의 이름을 출력

(2)

games 테이블에서 조건을 만족하는 publisher_id 목록을 추출하고, 메인 쿼리에서 IN절을 활용하여 회사의 이름을 출력

 

✅두 방법 모두 위 문제를 해결하기에 적합하지만 2번 쿼리의 경우 1번 쿼리보다 실행 시간이 상당히 길었다


이유를 살펴보니, 2번 쿼리에서의 IN절은 일반적으로 배열을 반복 검색하는 방식으로 동작하여 서브쿼리에서 반환된 publisher_id가 많을 경우 성능이 저하될 수 있다고 한다. 앞으로는 이 점에 유념하여 쿼리를 작성하도록 하자!

✔️ 0209 0813 복습