데이터리안 - SQL 데이터 분석캠프 실전반- 1주차: 서브쿼리

르네·2023년 11월 7일
0

SQL

목록 보기
48/63

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

문제

solvesql / 데이터셋: waiter's tips
Q. 요일 별로 가장 높은 금액의 결제 내역들을 출력해 주세요.

풀이

SELECT AVG(sales)
FROM (
      SELECT day
          , SUM(total_bill) sales
      FROM tips
      GROUP BY day
      ) AS dail_sales

WITH문

WITH daily_sales AS (SELECT day
                          , SUM(total_bill) sales
                     FROM tips
                     GROUP BY day
                     )
SELECT AVG(sales)
FROM daily_sales

배운점

  • IN 뒤에 쓰인 서브쿼리절은 AS를 못 붙인다!
  • 다중컬럼 서브쿼리 : WHERE (day, total_bill) IN (서브쿼리)

문제

solvesql / 데이터셋: waiter's tips
Q. 각 영수 금액이, 요일별 매출액에서 차지하는 비율을 계산해 주세요.

풀이

나의 풀이

WITH sales AS (
               SELECT day, SUM(total_bill) AS daily_sales 
               FROM tips 
               GROUP BY day
              )

SELECT t.day, t.total_bill, ROUND(t.total_bill * 100 / s.daily_sales, 2) AS pct
FROM tips t, sales s
ORDER BY t.total_bill DESC

선생님 풀이

WITH daily_sales AS (
               SELECT day, SUM(total_bill) AS sales 
               FROM tips 
               GROUP BY day
              )

SELECT t.day
     , t.total_bill
     , ROUND(t.total_bill * 100 / ds.sales, 2) AS pct
FROM tips AS t
  INNER JOIN daily_sales AS ds ON t.day = ds.day
ORDER BY t.total_bill DESC

배운점

  • WITH문을 쓸 때, 두 테이블을 활용해야 하면 MAIN절의 FROM에서 INNER JOIN을 해주면 된다.
profile
데이터분석 공부로그

0개의 댓글