10g:
Похоже, что 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>
Итак, это ошибка? Я бы не знал.