■ 출처
- 코딩테스트 : SQLite / 연습문제 / 난이도4
https://solvesql.com/problems/?page=1
■ 연습문제
1. 가구 판매의 비중이 높았던 날 찾기
SELECT
order_date,
COUNT(DISTINCT CASE WHEN category='Furniture' THEN order_id END) AS furniture,
ROUND(COUNT(DISTINCT CASE WHEN category='Furniture' THEN order_id END)/(COUNT(DISTINCT order_id)+0.00)* 100, 2) AS furniture_pct
FROM
records
GROUP BY
order_date
HAVING
COUNT(DISTINCT order_id) >= 10
AND furniture_pct >= 40.00
ORDER BY
furniture_pct DESC, order_date ASC
※ 오라클 환경이 아닌 SQLITE 환경에서는 '/'기로를 사용하면 나머지 결과없이 정수만 출력되므로 float형태로 변경하여 쿼라 설계 必 예시, SQLITE환경
- SELECT 10 / 3 → 3
- SELECT (10+0.00) / 3 → 3.333333...
2. 레스토랑 요일 별 구매금액 Top 3 영수증
RANK() / DENSE_RANK() 함수 : 데이터의 순위를 측정하는 것으로 동일한 점수를 받은 대상에게 같은 순위를 부여하는 함수
SELECT
day, time, sex, total_bill
FROM
(SELECT *, DENSE_RANK () OVER(PARTITION BY M.day ORDER BY total_bill DESC) AS RN
FROM tips AS M) AS MVMMM
WHERE
MVMMM.RN <= 3
※ 그룹별 상위 결과를 출력하는 방법이므로 숙지 必(요일 그룹의 구매금액이 높은 순서대로 순위를 측정하고 상위 순위에 대한 결과를 조회)