데이터리안 - SQL 데이터 분석캠프 실전반- 1주차: 워밍업(틀린문제 있음)

르네·2023년 11월 6일
0

SQL

목록 보기
47/63

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

문제

아래 형식에 맞춰 요일별, 시간대별 매출액을 집계해 주세요. 매출액은 반올림하여 소수점 둘째 자리까지만 출력해 주세요.

풀이

처음 푼 틀린 풀이

SELECT day
     , CASE WHEN time = 'Lunch' THEN ROUND(SUM(total_bill), 2) END AS lunch
     , CASE WHEN time = 'Dinner' THEN ROUND(SUM(total_bill), 2) END AS dinner
FROM tips
GROUP BY day
ORDER BY day

: 이렇게 푸니 피봇팅이 lunch와 dinner 각각 매출이 나뉘게 출력되었다.

수정해서 완성한 풀이

SELECT day
     , ROUND(SUM(CASE WHEN time = 'Lunch' THEN total_bill ELSE 0 END), 2) AS lunch
     , ROUND(SUM(CASE WHEN time = 'Dinner' THEN total_bill ELSE 0 END), 2) AS dinner
FROM tips
GROUP BY day
ORDER BY day

배운점

  • 원하는 결과를 얻기 위해 CASE 문을 사용하고 있지만, 각각의 CASE는 독립적으로 동작하기 때문에 Lunch와 Dinner를 한 행에 넣기가 어렵습니다. 대신, SUM 함수를 사용하여 Lunch와 Dinner의 매출을 별도로 계산한 다음에, 이를 조인하는 방법을 사용해야 합니다.

문제

배송 예정일 예측 성공과 실패

풀이

나의 풀이

SELECT DATE(order_purchase_timestamp) AS purchase_date
     , SUM(CASE WHEN order_estimated_delivery_date >= order_delivered_customer_date THEN 1 ELSE 0 END) AS success
     , SUM(CASE WHEN order_estimated_delivery_date < order_delivered_customer_date THEN 1 ELSE 0 END) AS fail
FROM olist_orders_dataset
WHERE order_delivered_customer_date IS NOT NULL
  AND order_estimated_delivery_date IS NOT NULL
  AND order_purchase_timestamp BETWEEN '2017-01-01 00:00:00' AND '2017-01-31 23:59:59'
GROUP BY purchase_date
ORDER BY purchase_date

선생님 풀이

SELECT DATE(order_purchase_timestamp) AS purchase_date
     , COUNT(DISTINCT CASE WHEN order_estimated_delivery_date >= order_delivered_customer_date THEN order_id END) AS success
     , COUNT(DISTINCT CASE WHEN order_estimated_delivery_date < order_delivered_customer_date THEN order_id END) AS fail
FROM olist_orders_dataset
WHERE order_delivered_customer_date IS NOT NULL
  AND order_estimated_delivery_date IS NOT NULL
  AND order_purchase_timestamp BETWEEN '2017-01-01 00:00:00' AND '2017-01-31 23:59:59'
GROUP BY purchase_date
ORDER BY purchase_date

배운점

  • 선생님 풀이는 COUNT()를 활용했다. order_id를 COUNT(DISTINCT~)로 세주었다. 내가 했던 방법도 괜찮고, 선생님 방법은 정석풀이로 괜찮은 것 같다.
profile
데이터분석 공부로그

0개의 댓글