본문 바로가기

SQL/개념 정리

SQL로 EDA해보기(2)

데이터셋: Brazilian E-Commerce Public Dataset by Olist

  • olist_orders_dataset → orders
  • olist_order_payments_dataset → payments
  • olist_customers_dataset → customers

 

1. orders 테이블 안에 몇 일 치의 데이터가 들어있나요?

    order_purchase_timestamp 컬럼을 기준으로 데이터의 시작 시점과 끝 시점을 알려주세요.

 

 

 

 

2. 고객들은 어떤 주(state)에 살고 있나요?

   customers 테이블 안에 customer_state 컬럼을 참고하여 olist 고객들이 어떤 주에 살고 있는지 알아봅시다.

   이 정보를 주문 데이터(orders)와 연결하려면 어떤 컬럼을 사용해야 하나요?

 

# 고객들이 살고 있는 주(state)

 

 

 

# orders 테이블과 연결하기 위해서는 customer_id(주문별 고객 id) 컬럼 사용

 

 

3. 고객들의 결제 데이터는 어떤 테이블에 있나요?

   주문 하나에 결제 데이터가 하나 붙어있는 1:1 관계인가요, 아니면 주문 하나에 결제 데이터가 여러 개 있을 수 있는 1:N 관계인가요?

   결제 금액은 어떤 컬럼을 보고 알 수 있나요? orders 테이블과 결제 데이터는 어떤 컬럼을 기준으로 연결할 수 있나요?

 

# 결제 데이터는 olist_order_payments_dataset  테이블에 있음

 

# 주문: 결제 데이터 = 1:N 관계

 

 

 

+) 결제 데이터가 6개인 주문 조회

 

 

 

 

# 결제 금액은 payment_velue 컬럼

 

# order_id 컬럼을 기준으로 orders 테이블과 연결 

 

 

4. orders, customers, payments 테이블을 사용하여 2017년에 매출이 많이 나오는 주(customer_state)가 어디인지 알아봅시다.

    2017년 매출 Top 3 주를 꼽아주세요.

 

 

# 쿼리 작성 순서

- 알고 싶은 정보는 2017년 매출 Top 3(주 이름, 매출 금액) 

1) JOIN으로 orders, customers, payments 테이블 연결

2) WHERE로 2017년 주문 정보만 검색

3) 주(state)별 매출 정보를 얻기 위해 GROUP BY 사용

4) SUM함수를 이용해 주(state)별 매출액 합산

5) ORDER BY와 LIMIT로 2017년 Top 3 주 출력 

 

 

<결과>

 

 

+) WHERE SUBSTR(order_purchase_timestap,1,4) = '2017' 은 비효율적인 코드

    order_purchase_timestap 컬럼에 있는 모든 데이터에 SUBSTR함수를 적용 후 '2017'와 같은 값이 찾아줌 

    아주 큰 데이터를 다룰 경우 실행이 되지 않을 수 있음 

    따라서 WHERE절에서 데이터를 필터링할 때는 기존 데이터를 가공하지 않는 선에서 처리하는 것이 좋다!

 

BETWEEN 사용

 

 

*본 내용은 데이터리안 'SQL 데이터 분석 캠프 입문반' 을 수강하며 작성한 내용입니다.

'SQL > 개념 정리' 카테고리의 다른 글

[SQL] 윈도우 함수-집계함수 사용 예시  (0) 2023.07.22
[SQL] COUNT 함수  (0) 2023.06.25
[SQL] UNION  (0) 2023.06.01
[SQL] JOIN  (0) 2023.05.31
SQL로 EDA해보기  (0) 2023.05.31