Answers:
随着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
可能就是您想要的。
TUPLE { a 17 , b 1 }
中与相同TUPLE { b 1 , a 17 }
,但在SQL中,行值构造函数(17, 1)
与行值构造函数不同(1, 17)
。这就是为什么您的“对”不是元组的原因。因为您已经省略了行类型构造函数,所以我必须从上下文中假设它们(a, b)
不是,(b, a)
但是包含它仍不能使它成为元组。相反,TUPLE { 17 , 1 }
在教程D中不是有效的元组调用,也不是TUPLE { a null , b 1 }
。
这是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