데이터 분석

solvesql | 레스토랑의 요일별 VIP 본문

SQL/solvesql

solvesql | 레스토랑의 요일별 VIP

딱한아이 2025. 1. 24. 12:26
레스토랑의 요일별 VIP

 

문제 조건

1. 요일별로 가장 높은 금액의 결제 내역을 출력

2. 쿼리 결과는 테이블에 있는 모든 컬럼을 포함

 

Solution

 

✔️ 쿼리 1 : 다중 컬럼 서브쿼리를 이용하여 해결

SELECT * 
FROM tips
WHERE (day, total_bill) IN (
  SELECT day
       , MAX(total_bill)
  FROM tips
  GROUP BY day
)

 

✅ 서브쿼리로 요일별 가장 높은 금액을 계산한다

✅ 메인쿼리 WHERE절에 다중 컬럼 조건으로 서브쿼리 결과와 만족하는 행만 반환한다

 

 

✔️ 쿼리 2 : ROW_NUMBER(), 윈도우 함수를 이용하여 해결

SELECT total_bill
     , tip
     , sex
     , smoker
     , day
     , time
     , size
FROM (
  SELECT *
       , ROW_NUMBER() OVER(PARTITION BY day ORDER BY total_bill DESC) AS row_n
  FROM tips
) tips_row_n
WHERE row_n = 1

 

✅ 요일별로 금액을 기준으로 내림차순 정렬하고, 각 행에 고유한 행 번호를 부여한다

✅ 서브쿼리에서 생성된 row_n 컬럼이 1인 행만 추출한다

 

 

✔️ 쿼리 3 : IN절 서브쿼리 대신 JOIN 연산

WITH daily_max AS (
  SELECT day
       , MAX(total_bill) AS sales
  FROM tips
  GROUP BY day
)
SELECT t.*
FROM daily_max d
  JOIN tips t ON d.day = t.day
             AND d.sales = t.total_bill