
저* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
이런식으로 써도 원래의 코드와 결과 값이 같을까? 하고 다시 써본 코드인데요
원래의 코드에서는 서브쿼리를 하나를 사용하여 결과를 도출하지만
궁금해서 서브 쿼리를 두개로 작성한 코드입니다.
이렇게 하면 정답 코드와 같은 결과 값이 나와야 할 것 같은데 결과는 이미지처럼 다르더라구요
코드의 어느 부분 때문에 결과 값이 원래의 정답 코드와는 결과가 다르게 나오는 걸까요??
정답 코드의 결과 값

변경한 코드 결과값

정답 코드
SELECT
CUISINE_TYPE,
MAX(IF(AGE_GROUP = '10대', ORDER_CNT, 0)) AS '10대',
MAX(IF(AGE_GROUP = '20대', ORDER_CNT, 0)) AS '20대',
MAX(IF(AGE_GROUP = '30대', ORDER_CNT, 0)) AS '30대',
MAX(IF(AGE_GROUP = '40대', ORDER_CNT, 0)) AS '40대',
MAX(IF(AGE_GROUP = '50대', ORDER_CNT, 0)) AS '50대'
FROM
(
SELECT
CUISINE_TYPE,
CASE
WHEN AGE BETWEEN 10 AND 19 THEN '10대'
WHEN AGE BETWEEN 20 AND 29 THEN '20대'
WHEN AGE BETWEEN 30 AND 39 THEN '30대'
WHEN AGE BETWEEN 40 AND 49 THEN '40대'
WHEN AGE BETWEEN 50 AND 59 THEN '50대'
END AS 'AGE_GROUP',
COUNT(1) AS ORDER_CNT
FROM food_orders FO INNER JOIN customers C ON FO.customer_id = C.customer_id
WHERE AGE BETWEEN 10 AND 59
GROUP BY 1,2
) A
GROUP BY 1
내가 임의로 변경한 코드
SELECT
CUISINE_TYPE,
MAX(IF(AGE_GROUP = '10대', ORDER_CNT, 0)) AS '10대',
MAX(IF(AGE_GROUP = '20대', ORDER_CNT, 0)) AS '20대',
MAX(IF(AGE_GROUP = '30대', ORDER_CNT, 0)) AS '30대',
MAX(IF(AGE_GROUP = '40대', ORDER_CNT, 0)) AS '40대',
MAX(IF(AGE_GROUP = '50대', ORDER_CNT, 0)) AS '50대'
FROM
(
SELECT
CUISINE_TYPE,
CASE
WHEN AGE BETWEEN 10 AND 19 THEN '10대'
WHEN AGE BETWEEN 20 AND 29 THEN '20대'
WHEN AGE BETWEEN 30 AND 39 THEN '30대'
WHEN AGE BETWEEN 40 AND 49 THEN '40대'
WHEN AGE BETWEEN 50 AND 59 THEN '50대'
END AS 'AGE_GROUP',
ORDER_CNT
FROM
(
SELECT
CUISINE_TYPE,
AGE,
COUNT(1) AS ORDER_CNT
FROM food_orders FO INNER JOIN customers C ON FO.customer_id = C.customer_id
WHERE AGE BETWEEN 10 AND 59
GROUP BY 1,2
) A
) B
GROUP BY 1
