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
- 퍼널분석
- dense_rank
- SolveSQL
- row_number
- rank
- funnel
- LEFTJOIN
- 프로그래머스
- 순위함수
- 그로스해킹
- 서브쿼리
- 누적합
- MYSQL
- 리텐션
- Datarian
- Retention
- 린분석
- pandas
- 윈도우함수
- python
- SQL
- 독서
- regexp
- 윈도우 함수
- 신입 데이터분석가
- 데이터리안
- 취준
- leetcode
- advent of sql
- 데이터분석
Archives
- Today
- Total
데이터 분석
[Day 6] solvesql | Advent of SQL 2024 | 게임을 10개 이상 발매한 퍼블리셔 찾기 본문
게임을 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 복습
'SQL > solvesql' 카테고리의 다른 글
| [Day 8] solvesql | Advent of SQL 2024 | 온라인 쇼핑몰의 월 별 매출액 집계 (0) | 2024.12.10 |
|---|---|
| [Day 7] solvesql | Advent of SQL 2024 | 기증품 비율 계산하기💡 (1) | 2024.12.07 |
| [Day 5] solvesql | Advent of SQL 2024 | '_'가 포함되지 않은 데이터 찾기💡 (3) | 2024.12.05 |
| [Day 4] solvesql | Advent of SQL 2024 | 지자체별 따릉이 정류소 개수 세기 (0) | 2024.12.04 |
| [Day 3] solvesql | Advent of SQL 2024 | 제목이 모음으로 끝나지 않는 영화💡 (3) | 2024.12.03 |