난이도 4
CODE 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))+0.00) / (COUNT(DISTINCT(order_id))+0.00)*100, 2) AS furniture_pct
FROM records
GROUP BY order_date
HAVING furniture >= 10
AND furniture_pct>= 40
ORDER BY furniture_pct DESC;
- 결과를 확인하고 싶은데 레코드 조회 결과가 너무 많단다...

CODE2
SELECT TABLE1.order_date
, TABLE2.furniture
, TABLE1.furniture_pct
FROM (SELECT order_date
, ROUND(COUNT((CASE WHEN category='Furniture' THEN order_id END)+0.00)/(COUNT(order_id)+0.00)*100, 2) furniture_pct
FROM records
GROUP BY order_date) TABLE1
, (SELECT order_date
, COUNT(order_id) furniture
FROM records
WHERE category = 'Furniture'
GROUP BY order_date) TABLE2
WHERE TABLE1.order_date = TABLE2.order_date
AND TABLE2.furniture >= 10
AND TABLE1.furniture_pct >= 40
ORDER BY TABLE1.furniture_pct DESC;
- 결과를 확인하고 싶은데 앞과 다르게 이번엔 비어있단다...

리뷰
- sqlLite는 나눴을 때, 정수부만 나온다.
- 따라서 임의로 실수형이 나오도록 해줘야 하는데 이의 해결법은 다음처럼 float형으로 만들어서 진행해주면 된다.
select (a+0.00)/(b+0.00) from table;
- 이 문제는 틀렸는지 맞았는지 알 수 없는 문제가 되었다.. 쿼리 결과가 비어있으면 틀린건가..? 근데 제출 버튼도 못누르게 되어있어서 무슨 의미인지 모르겠다.
- 그냥 넘어가...(결과가 어떻게 극과 극이 나오지...?)
- 이 코드의 문제점들이 아시는 분들은... 댓글로 남겨주시면 감사하겠습니다.😫
