[solvesql] 레스토랑 요일 별 구매금액 Top 3 영수증

yenpkr·2025년 4월 16일
0

sql

목록 보기
81/91

문제

제출

SELECT
  day,
  time,
  sex,
  total_bill
FROM
  (
    SELECT
      day,
      time,
      sex,
      total_bill,
      rank() OVER (
        PARTITION BY
          day
        ORDER BY
          total_bill DESC
      ) bill_rank
    FROM
      tips
  )
WHERE
  bill_rank <= 3

📝복습

✅ 랭킹 윈도우 함수

RANK()

순위를 매길 때 사용하는 윈도우 함수
정렬 기준에 따라 순위를 매기고, 동점일 경우 같은 순위를 부여하지만, 그 다음 순위는 건너뜀

RANK() OVER (
  [PARTITION BY 그룹기준컬럼]
  ORDER BY 정렬기준컬럼 [ASC | DESC]
)

• PARTITION BY: 순위를 나누는 그룹 컬럼 설정 (선택사항)
• ORDER BY: 순위를 결정하는 기준

예시

  1. day 컬럼별로 total_bill 컬럼 내림차순으로 순위 부여
rank() OVER (PARTITION BY day ORDER BY total_bill DESC)
  1. score 컬럼 내림차순으로 순위 부여
SELECT name, score,
       ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num
FROM students;
이름점수rank
A1001
B952
C952
D904

ROW_NUMBER()

순위 매기는 함수
동점처리 없어서 순위 건너뜀 없음

SELECT name, score,
       ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num
FROM students;
이름점수ROW_NUMBER
A1001
B952
C953
D904

DENSE_RANK()

순위 매기는 함수
동점처리 있지만 순위 건너뜀 없음 (RANK() 함수와 다른 점)

SELECT name, score,
       DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;
이름점수dense_rank
A1001
B952
C952
D903

0개의 댓글