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 |
Tags
- BM분석
- aarrr
- 올라
- 바로팜
- 머신러닝
- 퍼널분석
- retention
- pmf
- 코호트
- mysql설치 #mysql #mysqluser #mysqlworkbench
- 그로스해킹
- 리텐션
- 셀프스토리지
- fundbox
- 비즈니스모델
- 역설구조
- 한장으로끝내는비즈니스모델100
- 전환율
- model_selection
- allra
- 활성화
- 인게이지먼트
- sklearn
- 팔방이익구조
- 서말리포켓
- 로지컬씽킹
- 핀테크
- 데이터분석
- CAC
- 선정산서비스
Archives
- Today
- Total
데이터로그😎
[solvesql] 매출이 높은 배우 찾기: 효율적인 쿼리 짜기 ⭐ 본문
*외부 사이트에 문제 게시를 금하기 때문에 풀이법만 기록함.
- 문제 요약: DVD 대여점에서 대여 매출이 높았던 상위 5명의 배우 추출하기. --> 배우별 대여매출을 구해야한다.
- 테이블 정보:
테이블 컬럼 (중요부분만 기재하겠음) actor actor_id, first_name, last_name film_actor film_id, actor_id rental rental_id, inventory_id payment payment_id, rental_id, amount inventory inventory_id, film_id
actor ──< film_actor ──< inventory ──< rental ──< payment
1:N 1:N 1:N 1:N
☑️actor(actor_id) = film_actor(actor_id)
☑️rental(rental_id) = payment(rental_id)
☑️rental(inventory_id) = inventory(inventory_id)
☑️film_actor(film_id) = inventory(film_id)
- 풀이법: 테이블 정보를 보니 배우별 대여매출을 구하기 위해선 다음과 같은 루트를 거쳐야 한다.
- 테이블 크기를 보니 actor < film < rental 순으로 흘러간다. 따라서 rental -> film -> actor 정보 순으로 join이 필요하다.
- 1) 대여매출: rental<->payment
- 2) 영화별 매출: inventory <->대여매출
- 배우별 대여매출:
- 3) 배우별 출연영화: actor <-> film_actor
4) 배우별 대여매출: 배우별 출연영화 <-> 영화별 매출대여매출: rental<->payment
- 3) 배우별 출연영화: actor <-> film_actor
- *제일 row 수가 많은, 정보가 많은 payment, rental 단계에서 group by 를 먼저해 영화별 매출을 구하는 것이 좋다.
이 단계에서 group by를 하지 않은 채 actor, film_actor와 join을 할 경우, 모든 payment record가 actor와 film_actor 에 붙어, row가 폭증하게 된다)
with pay_rent as (
select i.film_id, sum(p.amount) as revenue
from rental r
join payment p on r.rental_id = p.rental_id -- 🔥1)대여매출
join inventory i on r.inventory_id = i.inventory_id -- 🔥2)영화별 대여매출
group by 1 -- ⭐row가 많은 payment 쪽에서 먼저 group by
)
select first_name, last_name, sum(revenue) as total_revenue
from actor a
join film_actor f on f.actor_id = a.actor_id -- 🔥3)배우별 출연영화
join pay_rent p on f.film_id = p.film_id --🔥4)배우별 대여매출
group by a.actor_id, first_name, last_name
order by 3 desc
limit 5
https://solvesql.com/problems/top-revenue-actors/
https://solvesql.com/problems/top-revenue-actors/
solvesql.com
'# 1. 언어 > # 1.1. SQL' 카테고리의 다른 글
| [solvesql] 5년 연속 베스트셀러 작가 찾기 (0) | 2025.12.26 |
|---|---|
| [MySQL] 시간 함수 (0) | 2025.06.25 |
| [SQL] COALESCE(x, y, z..) (0) | 2025.06.24 |
| [SQL기본] DISTINCT, 제대로 알고 쓰자! (0) | 2025.04.10 |
| [SQL기본] NOT IN 사용 시 주의사항 (0) | 2025.04.07 |