답변:
로 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 }
Tutorial 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