【问题标题】:Need to convert MySQL group by query to oracle需要将 MySQL group by query 转换为 oracle
【发布时间】:2014-02-20 19:47:10
【问题描述】:

如何将此查询转换为 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

【问题讨论】:

标签: mysql sql oracle11g


【解决方案1】:

您的查询在一列上使用group by。与 Sybase 等其他一些平台不同,Oracle 要求所有单独的 select 元素都出现在 group by 中或在 summaxavg 等组函数中使用。 我认为这个要求是件好事;它使查询的结果具有确定性。 要将此查询移植到 Oracle,请确保对于每个选择项:

  • 将其包含在group by 中(现在可以使用别名或完整表达式来完成)。
  • 或将其包含在一个组函数中,例如max

如果您需要小计等,请考虑使用分析功能。它们允许您指定一个不同的窗口来计算某些东西。或者使用grouping sets 之类的。祝你好运!

【讨论】:

  • 谢谢吉多。最后 ROW_NUMBER() OVER(PARTITION BY ORDER BY ) AS 解决了我的目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
相关资源
最近更新 更多