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

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

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

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

产量:

  1. COUNT(*)
  2. ----------
  3. 0

鉴于此查询 GROUP BY () :

  1. select count(*)
  2. from dual
  3. where 1 = 0
  4. group by ();

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

i7uaboj4

i7uaboj41#

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

  1. with g as (
  2. select . . .
  3. from . . .
  4. group by . . .
  5. )
  6. select g.*
  7. from g
  8. union all
  9. select g.*
  10. from (select 1 as n from dual) n left join
  11. g
  12. on 1 = 0 -- never true
  13. where not exists (select 1 from g)
kb5ga3dv

kb5ga3dv2#

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

  1. SQL> select sum(case when 1 = 0 then 1 else 0 end) as res
  2. 2 from dual
  3. 3 group by 1;
  4. RES
  5. ----------
  6. 0
  7. SQL>

相关问题