신이 되고 싶은 갓지이

SQL 코테 연습문제 풀이 solvesql 난이도.4 문제풀이 2 본문

SQL

SQL 코테 연습문제 풀이 solvesql 난이도.4 문제풀이 2

갓지이 2025. 3. 20. 23:30

1. 레스토랑 요일 별 구매금액 Top 3 영수증

 

https://solvesql.com/problems/top-3-bill/

 

solvesql.com

 

<문제>

레스토랑의 매니저는 요일 별로 큰 금액을 결제한 영수증을 찾고 싶습니다. 요일 별 결제 금액으로 Top 3(조건1) 를 지불한 영수증을 출력해주세요. 예를 들어 금요일 손님들의 결제 금액이 각각 $10, $9, $9, $8, $5, $2 였다면 상위 결제 금액 3개는 $10, $9, $8입니다. 따라서 결제 금액이 $10, $9, $9, $8인 총 4개의 영수증을 각각 출력(조건2)해야 합니다.

 

-> 우선 조건1을 만족하기 위해선 window 함수를 사용해야한다. 요일별이 PARTITION 을 'day'로, 결제 금액으로 TOP3이니 ODRER을 'total_bill'로 하였다. top3만 구하기 위해선 구한 rnk 칼럼을 써야하는데 WHERE문에서 window함수는 사용할 수 없으니, 서비쿼리로 찾아서 구했다. 마지막으로 예시에서 동일 금액이면 동일 rank를 부여하여, DENSE_RANK(동일값이면 동일순서&순서 건너뛰지 않기)로 순서를 구했다.

SELECT day, time, sex, total_bill
FROM (SELECT day, total_bill, time, sex
      , DENSE_RANK() OVER(PARTITION BY day ORDER BY total_bill DESC) AS RNK -- 조건1,2
      FROM tips ) A
WHERE RNK<=3 -- 조건1