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

Ga0·2023년 7월 9일
0

solvesql

목록 보기
3/3

난이도 4

CODE 1

SELECT  order_date
        -- 카운트와 비율을 구할 때 주문번호는 중복되면 안되기 때문에 DISTINCT 키워드를 사용한다.
        -- 카테고리가 Furniture인 것을 모두 카운트 한다.
      , COUNT(DISTINCT(CASE WHEN category='Furniture' THEN order_id END)) as furniture
        -- 카테고리가 Furnitured인 것과 총 주문 횟수로 나눠서 비율을 구한다.(소수 둘째자리까지)
      , 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 -- 주문 날짜 기준으로 그룹화했을 때 주문횟수(중복x)가 10회 이상이고 
   AND furniture_pct>= 40 -- 비율이 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;
  • 이 문제는 틀렸는지 맞았는지 알 수 없는 문제가 되었다.. 쿼리 결과가 비어있으면 틀린건가..? 근데 제출 버튼도 못누르게 되어있어서 무슨 의미인지 모르겠다.
  • 그냥 넘어가...(결과가 어떻게 극과 극이 나오지...?)
  • 이 코드의 문제점들이 아시는 분들은... 댓글로 남겨주시면 감사하겠습니다.😫

0개의 댓글