GROUP BY B,A 和 GROUP BY COALESCE(B,A) 之间的区别

Mar*_*ren 20 oracle query

我一直让自己很困惑。

有人可以解释一下在什么情况下我想使用 GROUP BY COALESCE 吗?

我的猜测是,如果我想按 B 列(如果 B 不为空)和 A 列有条件地对一组数据进行分组,我会使用它。听起来对吗?

a_h*_*ame 37

随着GROUP BY b,a元组(null, 1)(1,1)(2,1)(17,1)会在四个不同的组结束了。

随着GROUP BY coalesce(b,a)元组(null,1)(1,1)(2,1)并且(17,1)将在同一个组。

如果您想要“条件”分组,那么是的,带有的版本coalesce可能就是您想要的。


Lei*_*fel 16

这是 a_horse_with_no_name 出色的+1答案的演示。

SQL> WITH Data AS (
  2     SELECT level, DECODE(Level,3,NULL,1) A
  3        , DECODE(level,2,NULL,4,2,1) B
  4     FROM dual connect by level <=5
  5     )
  6  SELECT A, B, count(*) FROM Data GROUP BY B, A;

A B   COUNT(*)
- - ----------
1 1          2
1            1
1 2          1
  1          1


SQL> WITH Data AS (
  2     SELECT level, DECODE(Level,3,NULL,1) A
  3        , DECODE(level,2,NULL,4,2,1) B
  4     FROM dual connect by level <=5
  5     )
  6  SELECT COALESCE(B, A) X, count(*) FROM Data GROUP BY COALESCE(B, A);

X   COUNT(*)
- ----------
1          4
2          1
Run Code Online (Sandbox Code Playgroud)

  • 不错的示范! (2认同)