수업 시간에 다뤘던 문제를 풀다가 갑자기 테이블들을 join 할 때, 기준이 되는 테이블은 어떤 것이 되어야 하는지 갑자기 궁금해졌다.
DB 정보
# DB 안에 존재하는 모든 테이블을 보여준다.
show tables;
# 결과 [테이블 명 (내부 칼럼명)]
# customers (customer_id, name, email, city)
# products (product_id, name, price, category)
# orders (order_id, customer_id, order_date, total_amount)
# order_details (order_detail_id, order_id, product_id, qauntity)
제품 별 매출 파악하기
매출 = 가격 * 수량 [ 칼럼명(테이블명) ]
revenue = price(products) * quantity(order_details)
이때 두 개의 테이블을 join 해야 하기 때문에 어떤 테이블을 기준으로 잡고 join을 할지 고민해야 한다.
* product_id로 join 할 것이다.
1. 데이터의 관계
- order_details 테이블
- 각 주문 항목에 대한 정보를 담고 있다.
- product_id와 quantity 정보를 포함하고 있다.
- 즉, order_details 테이블에는 어떤 주문(order_id)에서 어떤 제품(product_id)이 몇 개(quantity) 팔렸는지 나온다.
- products 테이블
- 각 제품의 price, name, category를 담고 있다.
- 매출 계산에 필요한 price 정보와 product_id를 포함하고 있다.
2. 왜 products 테이블이 아닌 order_details 테이블을 기준으로 조인할까?
- order_details 테이블은 주 테이블이다.
- 우리는 각 주문마다 팔린 수량을 기준으로 매출을 계산한다.
- order_details는 주문별 수량 정보를 가지고 있으니, 해당 테이블을 기준으로 join하는 것이 자연스럽다.
- 그렇기에 products 테이블은 보조 역할을 하게 된다.
3. 결론
- order_details (메뉴판) : 어떤 주문이 있었고, 몇 개나 주문했는지 알려준다.
- products (가격표) : 각 제품의 가격을 알려주는 역할이다.
주문이 중심이고, 제품 정보는 이를 보완하는 역할을 한다.
select
od.product_id,
p.name,
sum(od.quantity * p.price) as revenue
from order_details od
join products p on od.product_id = p.product_id
group by od.product_id, p.name;
BDA학회, 빅데이터 분석 학회, 대학생 학회, 데이터 분석
728x90
'대외활동 및 인턴 > 빅데이터 분석 학회 BDA' 카테고리의 다른 글
SQL 문제 풀이 (BDA학회 SQL 문법 기초 연습반) (0) | 2025.01.12 |
---|---|
전체 매출의 상위 20%를 차지하는 제품 구하기 (BDA학회 SQL 문법 기초 연습반) (0) | 2025.01.11 |
코호트 분석과 검증 쿼리의 중요성 (BDA학회 SQL 문법 기초 연습반) (0) | 2024.11.17 |
[강연] 태블로 기초 이론 (1) | 2024.11.16 |
[강연] 전공자를 위한 데이터 직무 커리어패스 (5) | 2024.11.15 |