如何将此查询转换为Oracle group By。将应用程序从MySQL迁移到Oracle数据库时,我遇到了这个问题。
SELECT j.id AS j__id
, j.processing_office_id AS j__processing_office_id
, j.lga_id AS j__lga_id
, j.created_at AS j__created_at
, j.updated_at AS j__updated_at
, j.created_by AS j__created_by
, j.updated_by AS j__updated_by
, j.deleted_at AS j__deleted_at
, t.name AS t__0
, t3.id AS t3__1
, t3.name AS t3__2
FROM join_processing_office_state_lga j
LEFT
JOIN tbl_lga t
ON j.lga_id = t.id
AND t.deleted_at IS NULL
AND t.active_flag = 'Y'
LEFT
JOIN tbl_procesing_office t2
ON j.processing_office_id = t2.id
LEFT
JOIN tbl_state t3
ON t.state_id = t3.id
AND t3.deleted_at IS NULL
AND t3.active_flag = 'Y'
WHERE t2.active_flag = 'Y'
AND t2.active_flag = 'Y'
AND j.deleted_at IS NULL
GROUP
BY t.state_id
ORDER
BY t3.name
答案 0 :(得分:1)
您的查询在一列上使用group by
。与Sybase等其他平台不同,Oracle要求所有单独的选择元素都在group by
中出现,或者在sum
,max
和avg
等组功能中使用。
我认为这个要求是好事;它使查询的结果具有确定性。
要将此查询移植到Oracle,请确保每个选择项目:
group by
中(现在可以使用别名或完整表达式完成)。max
等组功能中。如果您需要小计等,请考虑使用分析功能。它们允许您指定计算某些内容的不同窗口。或者使用grouping sets
等。祝你好运!