使用group by时强制oracle sql查询至少返回一行

9bfwbjaz  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(407)

使用空分组集时,即使使用聚合函数,oracle也不会返回任何行。
例如,此查询没有 GROUP BY 条款:

select count(*)
from dual
where 1 = 0;

产量:

COUNT(*)
----------
         0

鉴于此查询 GROUP BY () :

select count(*)
from dual
where 1 = 0
group by ();

不返回任何行。
如何强制oracle至少返回一行,即使查询包含 GROUP BY 条款?
你能用它吗 GROUPING SETS , ROLLUP , CUBE 或者其他的 GROUP BY 条款?
我想避免使用 UNION ALL .

i7uaboj4

i7uaboj41#

你可以用cte检查 group by 不返回任何行:

with g as (
      select . . .
      from . . .
      group by . . .
     )
select g.*
from g
union all
select g.*
from (select 1 as n from dual) n left join
     g
     on 1 = 0  -- never true
where not exists (select 1 from g)
kb5ga3dv

kb5ga3dv2#

您可以编写条件聚合,而无需任何 WHERE 查询中的子句如下:

SQL> select sum(case when 1 = 0 then 1 else 0 end) as res
  2    from dual
  3  group by 1;

       RES
----------
         0

SQL>

相关问题