【发布时间】:2012-07-20 09:21:39
【问题描述】:
我已经重新编写了一个从 Mysql 到 oracle 的查询,而 Mysql 给了我一行,而 oracle 给出了多个,只是想知道为什么?
Mysql 查询
select me.col1,
me.col2,
me.col3,
min(col3) as me_col3 ,
group_concat(col2) col4,
from
my_sql_table me
group by me.col2
order by col3
重写为 Oracle
select
me.col1,
me.col2,
me.col3,
min(col3) over (partition by episode_id order by col3) as me_col3 ,
LISTAGG(col2, ',') WITHIN GROUP (ORDER BY col3) over (partition by col2)
from
my_sql_table me
group by me.col1,me.col2,me.col3
order by col3
知道如何重写该查询以使 Mysql 和 Oracle 给出相同的结果吗?
做了一些研究,发现如果我删除 group_concat 和 listagg 我在 Mysql 和 Oracle 中得到相同的结果。
但是如果我在后面加上group_concat,那么结果会在 Mysql 和 Oracle 之间有所不同。
【问题讨论】:
-
查询将在 Oracle 中失败,出现 ORA-00979:不是 GROUP BY 表达式。你为什么不给我们一个工作的例子?
-
如果将 MySQL 查询中的 GROUP BY 更改为包含 col1、col2 和 col3,会发生什么情况?那么结果是否匹配?如果是这样,问题是 MySQL 允许但 Oracle 不允许的不完整 GROUP BY。
-
Bob 是的,如果我添加列 col1、col2、col3,结果确实匹配,我不知道如何摆脱这种情况,我们将不胜感激
标签: sql oracle aggregate-functions