gpt4 book ai didi

sql - SELECT UDAF(AGGR()) HAVING 中的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 02:51:21 24 4
gpt4 key购买 nike

有两个选择语句:

select       max(min(str)) from (select 0 id, 'a' str from dual) group by id having min(str) = 'a';
select strconcat(min(str)) from (select 0 id, 'a' str from dual) group by id having min(str) = 'a';

唯一的区别是外层聚合函数:max()strconcat()
您可以将 strconcat() 替换为您拥有的任何 UDAF。

前面的语句按预期工作:它返回字符串 'a'
后一声明:
-(在 Oracle 10g 上)给出了错误的结果(null 而不是字符串 'a')
-(在 Oracle 11g 上)引发 ORA-00979:不是 GROUP BY 表达式

我不明白这个错误信息。
您能解释一下这种行为吗?
是 Oracle 错误吗?

最佳答案

10克:

似乎 WM_CONCAT 对我可用(是的,未记录,但在这种情况下无关紧要)或 STRCONCAT 您使用(或可能是其他一些功能)需要将水平“提高”;看这个例子:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

SQL> select max(min(str)) result
2 from (select 0 id, 'a' str from dual)
3 group by id having min(str) = 'a';

R
-
a

SQL> -- returns NULL, just as you've said
SQL> select wm_concat(min(str)) result
2 from (select 0 id, 'a' str from dual)
3 group by id having min(str) = 'a';

RESULT
---------------------------------------------------------------------


SQL> -- but, if we put it a level "up", the result is OK
SQL> select wm_concat(minstr) result
2 from (select min(str) minstr
3 from (select 0 id, 'a' str from dual)
4 group by id having min(str) = 'a'
5 );

RESULT
---------------------------------------------------------------------
a

SQL>

11g:

好的,两个查询(我在这里使用 listagg):

SQL> select       max(min(str)) result
2 from (select 0 id, 'a' str from dual)
3 group by id having min(str) = 'a';

R
-
a

SQL>
SQL> select listagg(min(str), ',') within group (order by null) result
2 from (select 0 id, 'a' str from dual)
3 group by id having min(str) = 'a';

RESULT
-----------------------------------------------------------------------
a

SQL>

那么,这是一个错误吗?我不知道。

关于sql - SELECT UDAF(AGGR()) HAVING 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52038384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com