가구 판매의 비중이 높았던 날 찾기 : solvesql

오유찬·2026년 2월 1일

SQL

목록 보기
69/71
-- 01. 일별 주문 수 10개 이상
-- 02. 'Furniture' 카테고리 주문 비율 40% 이상
WITH cte AS (
  SELECT  order_date, 
          SUM(CASE WHEN category = 'Furniture' THEN 1 ELSE 0 END) as furniture
          ,count(category) as cnt
  FROM    records
  GROUP BY
        order_date
  HAVING 
        COUNT(order_id) >= 10 
        AND furniture / cnt >= 0.4
)

SELECT  order_date, furniture, 
        ROUND(furniture / cnt * 100, 2) as furniture_pct
FROM    cte
ORDER BY
        furniture_pct DESC, order_date ASC

12개가 나와야 되는데 반환된 쿼리 결과가 7개다.
조건을 다시 한 번 살펴보자.

HAVING 절에 furniture / cnt >= 0.4라고 했는데
이렇게 하면 furniture의 카테고리 비율이 나오지 주문의 비율이 나오는 게 아니다.

select order_date, count(order_id)
from records
where order_date = '2020-11-19'
group by order_date

주문 수 26
count(case when category = 'furniture' then 1 end)는 category 개수를 세는 거니까 아니기 때문에 수정 필요

answer

WITH cte AS (
  SELECT  order_date, 
          COUNT(DISTINCT CASE WHEN category ='Furniture' THEN order_id END) as furniture
          ,count(DISTINCT order_id) as order_cnt
  FROM    records
  GROUP BY
        order_date
  HAVING 
        order_cnt >= 10
        AND furniture / order_cnt >= 0.4
)

SELECT  order_date, furniture,
        ROUND(furniture / order_cnt * 100, 2) as furniture_pct
FROM    cte
ORDER BY
        furniture_pct DESC, order_date ASC
profile
열심히 하면 재밌다

0개의 댓글