SQL

🚫[실무]solvesql SQLite 연습문제 난이도4

노력하는 백곰 2024. 6. 28. 09:58

■ 출처

- 코딩테스트 : SQLite / 연습문제 / 난이도4

https://solvesql.com/problems/?page=1

 

https://solvesql.com/problems/?page=1

 

solvesql.com

 

 

■ 연습문제

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

그룹별 상위 결과를 출력하는 방법이므로 숙지 必(요일 그룹의 구매금액이 높은 순서대로 순위를 측정하고 상위 순위에 대한 결과를 조회)