오라클은 실제로 올바른 동작을 수행하고 있습니다. GROUP BY
을 사용할 때 선택 목록의 항목은 GROUP BY
또는 집계 함수에 나타나야합니다.
SELECT order1.user_id,
order1.order_datetime,
SUM(order2.order_total)
FROM order_table order1
JOIN order_table order2 ON order1.user_id = order2.user_id
GROUP BY order1.user_id, order1.order_datetime
MySQL은 FULL GROUP BY을 적용하지 않는 행동을 할 수있는 EXTENSION TO GROUP BY
를 사용합니다. MySQL에서 이것을 사용한다고해도 order1.order_datetime
의 값이 무엇인지 보장 할 수 없으며, MySQL은 단지 하나의 값을 선택하기 때문에 결과가 예상치 않게 될 수 있습니다.
목록의 모든 항목에 대해 GROUP BY
또는 집계를 사용해야하거나 위 쿼리를 다시 작성해야합니다. 당신은 다음 중 하나를 사용할 수 있습니다
order_datetime
에 집계를 적용
SELECT order1.user_id,
min(order1.order_datetime) order_datetime,
SUM(order2.order_total)
FROM order_table order1
JOIN order_table order2 ON order1.user_id = order2.user_id
GROUP BY order1.user_id
은 다음 날짜로 그룹이 없습니다.
SELECT order1.user_id,
order1.order_datetime,
SUM(order2.order_total) over(partition by order1.user_id) order_total
FROM order_table order1
JOIN order_table order2 ON order1.user_id = order2.user_id
을 또는이 하위 쿼리를 사용하여 다시 작성 할 수 있습니다
당신은 sum() over()
를 사용할 수 있습니다.
오라클에서
SELECT order1.user_id,
order1.order_datetime,
order2.order_total
FROM order_table order1
JOIN
(
select SUM(order_total) order_total, user_id
from order_table
group by user_id
) order2
ON order1.user_id = order2.user_id
MySQL은 고양이를 좋아하지 않기 때문에. – Kermit
MySQL은 임의의'order1.order_datetime'을 선택하는 것이 좋다고 생각하기 때문에. 가치가있는 것은 다른 심각한 데이터베이스 플랫폼에서도 쓸모없는 구문이 합법적이지 않은 것입니다. MySQL이 문법에 관한 지식이 없다고해서 그것이 옳은 것은 아닙니다. –