Oracleは実際に正しい動作を実行しています。を使用している場合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は、FULLGROUPBYEXTENSION TO GROUP BY
を適用しない動作を可能にするを使用します。MySQLでこれを使用しても、の値がどうなるかは保証されません。MySQLは1つの値を選択するだけで、予期しない結果になる可能性があります。order1.order_datetime
GROUP BY
リスト内のすべてのアイテムでまたは集計を使用するかSELECT
(上記と同様)、クエリを書き直す必要があります。次のいずれかを使用できます。
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
に集計を適用するorder_datetime
場合、日付でグループ化する必要はありません。
あなたが使用することができますsum() over()
:
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
または、サブクエリを使用してこれを書き換えることができます。
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