-- 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 개수를 세는 거니까 아니기 때문에 수정 필요
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