Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- leetcode
- regexp
- 린분석
- 취준
- 리텐션
- dense_rank
- row_number
- python
- 서브쿼리
- 그로스해킹
- 순위함수
- 독서
- rank
- 프로그래머스
- pandas
- 퍼널분석
- 윈도우함수
- 누적합
- SQL
- LEFTJOIN
- SolveSQL
- 데이터분석
- Retention
- 데이터리안
- 신입 데이터분석가
- MYSQL
- advent of sql
- Datarian
- 윈도우 함수
- funnel
Archives
- Today
- Total
데이터 분석
solvesql | 레스토랑의 요일별 VIP 본문
레스토랑의 요일별 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'SQL > solvesql' 카테고리의 다른 글
| [플레이그라운드] 1분기 동안의 고객별 인기 상품 Top3 (0) | 2025.03.05 |
|---|---|
| [플레이그라운드] 카테고리별 매출액, 총매출액, 비율 집계 (0) | 2025.03.03 |
| solvesql | 다음날도 서울숲의 미세먼지 농도는 나쁨 😵💫 (2) | 2025.01.24 |
| [Day 24] solvesql | Advent of SQL 2024 | 이상 사용자 탐지💡 (2) | 2024.12.25 |
| [Day 23] solvesql | Advent of SQL 2024 | 유량 지표와 저량 지표 (2) | 2024.12.25 |