
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
피드백 :
답안의 쿼리는 내부 쿼리에서 연령대별로 데이터를 먼저 분류하여 age를 새롭게 정의하고, 각 연령대의 order_count를 미리 계산합니다. 이후 외부 쿼리에서 MAX(IF(...))로 연령대별 주문 수를 선택합니다. 서브쿼리 결과를 외부에서 MAX로 선택해 추가적인 연산을 하므로, 데이터 양이 많을 때 성능 차이가 날 수 있습니다.
각 쿼리의 연산 방식과 데이터 집계 구조가 다르기 때문에 차이가 있을 수 있습니다.
피드백 내용대로 sql 문을 재구성했습니다.
그러나, 여전히 결과물 사진의 값과 다른 경우가 발생합니다.
그 이유를 알고 싶습니다.
이와 별개로, conact과 substr은 문자, 숫자 구분 안하고 실행할 수 있나요?
그리고 if 문은 왜 concat의 반환 값이 문자임에도, age = 10, age = 20을 판별할 수 있는 건가요?
감사합니다.
select cuisine_type,
max(if(age = 10, order_count, 0)) 10대,
max(if(age = 20, order_count, 0)) 20대,
max(if(age = 30, order_count, 0)) 30대,
max(if(age = 40, order_count, 0)) 40대,
max(if(age = 50, order_count, 0)) 50대
from
(
select cuisine_type, age, count(1) order_count
from(
select customer_id,
CONCAT(SUBSTR(age, 1, 1), 0) age
from customers
where customers.age between 10 and 59
) c
inner join food_orders f on c.customer_id = f.customer_id
group by 1,2
) t
group by 1
