728x90
문제
tips 테이블에는 식사 금액, 팁, 결제자 성별, 결제 요일 등 레스토랑 손님들의 결제 영수증 정보가 들어있습니다.
레스토랑의 매니저는 요일 별로 큰 금액을 결제한 영수증을 찾고 싶습니다.
요일 별 결제 금액으로 Top 3 를 지불한 영수증을 출력해주세요. 결제 금액은 total_bill 컬럼에 있습니다.
예를 들어 금요일 손님들의 결제 금액이 각각 $10, $9, $9, $8, $5, $2 였다면 상위 결제 금액 3개는 $10, $9, $8입니다.
따라서 결제 금액이 $10, $9, $9, $8인 총 4개의 영수증을 각각 출력해야 합니다.
결과 데이터에는 아래 컬럼들이 포함되어야 합니다.
day - 요일
time - 시간대
sex - 결제자 성별
total_bill - 식사 금액 ($)
https://solvesql.com/problems/top-3-bill/
문제 풀이
WITH RankedBills AS (
SELECT day,
time,
sex,
total_bill,
DENSE_RANK() OVER (PARTITION BY day ORDER BY total_bill DESC) AS rank -- 중복 순위 구하기
FROM tips
)
SELECT day,
time,
sex,
total_bill
FROM RankedBills
WHERE rank <= 3; -- rank가 3위 이상인 경우만
SQL을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90