카테고리:

집계 함수 (부울) , 윈도우 함수 , 조건식 함수

BOOLXOR_AGG

그룹 내에 있는 NULL이 아닌 부울 레코드의 논리(부울) XOR 값을 반환합니다.

BOOLXOR_AGG는 그룹에서 정확히 하나의 레코드TRUE 로 평가되는 경우에만 TRUE 를 반환합니다. 이는 레코드의 누적 XOR과는 다릅니다.

그룹 내의 모든 레코드가 NULL이거나 그룹이 비어 있는 경우, 함수는 NULL을 반환합니다.

참고 항목:

BOOLXOR , BOOLAND_AGG , BOOLOR_AGG

구문

집계 함수

BOOLXOR_AGG( <expr> )

윈도우 함수

BOOLXOR_AGG( <expr> ) OVER ( [ PARTITION BY <partition_expr> ] )

인자

expr

입력 식은 부울로 평가되거나 부울로 변환될 수 있는 식이어야 합니다.

partition_expr

이 열 또는 식은 입력을 파티션(하위 윈도우)으로 분리하는 방법을 지정합니다.

반환

반환된 값의 데이터 타입은 BOOLEAN 입니다.

사용법 노트

  • 숫자 값이 0이 아닌 경우 TRUE 로 변환됩니다.

  • 문자/텍스트 형식은 부울로 변환할 수 없으므로 지원되지 않습니다.

  • 윈도우 함수로 사용되는 경우:

    • 이 함수는 다음을 지원하지 않습니다.

      • OVER 절의 ORDER BY 하위 절.

      • 윈도우 프레임.

다음 예는 입력 값 중 정확히 하나가 true인 경우, boolxor_agg가 true를 반환함을 보여줍니다.

테이블을 만들고 로딩합니다.

create or replace table test_boolean_agg(
    id integer,
    c1 boolean, 
    c2 boolean,
    c3 boolean,
    c4 boolean
    );

insert into test_boolean_agg (id, c1, c2, c3, c4) values 
    (1, true, true,  true,  false),
    (2, true, false, false, false),
    (3, true, true,  false, false),
    (4, true, false, false, false);

데이터를 표시합니다.

select * from test_boolean_agg;
+----+------+-------+-------+-------+
| ID | C1   | C2    | C3    | C4    |
|----+------+-------+-------+-------|
|  1 | True | True  | True  | False |
|  2 | True | False | False | False |
|  3 | True | True  | False | False |
|  4 | True | False | False | False |
+----+------+-------+-------+-------+

데이터를 쿼리합니다.

select boolxor_agg(c1), boolxor_agg(c2), boolxor_agg(c3), boolxor_agg(c4)
    from test_boolean_agg;
+-----------------+-----------------+-----------------+-----------------+
| BOOLXOR_AGG(C1) | BOOLXOR_AGG(C2) | BOOLXOR_AGG(C3) | BOOLXOR_AGG(C4) |
|-----------------+-----------------+-----------------+-----------------|
| False           | False           | True            | False           |
+-----------------+-----------------+-----------------+-----------------+

윈도우 함수

이 예는 이전 예와 유사하지만, 입력 행이 두 파티션(하나는 0보다 큰 ID용, 다른 하나는 0보다 작거나 같은 ID용)으로 분할된 윈도우 함수로서의 사용법을 보여줍니다. 추가 데이터가 테이블에 추가되었습니다.

테이블에 행을 추가합니다.

insert into test_boolean_agg (id, c1, c2, c3, c4) values
    (-4, false, false, false, true),
    (-3, false, true,  true,  true),
    (-2, false, false, true,  true),
    (-1, false, true,  true,  true);

데이터를 표시합니다.

select * 
    from test_boolean_agg
    order by id;
+----+-------+-------+-------+-------+
| ID | C1    | C2    | C3    | C4    |
|----+-------+-------+-------+-------|
| -4 | False | False | False | True  |
| -3 | False | True  | True  | True  |
| -2 | False | False | True  | True  |
| -1 | False | True  | True  | True  |
|  1 | True  | True  | True  | False |
|  2 | True  | False | False | False |
|  3 | True  | True  | False | False |
|  4 | True  | False | False | False |
+----+-------+-------+-------+-------+

데이터를 쿼리합니다.

select 
      id, 
      boolxor_agg(c1) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c2) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c3) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c4) OVER (PARTITION BY (id > 0))
    from test_boolean_agg
    order by id;
+----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+
| ID | BOOLXOR_AGG(C1) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C2) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C3) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C4) OVER (PARTITION BY (ID > 0)) |
|----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------|
| -4 | False                                        | False                                        | False                                        | False                                        |
| -3 | False                                        | False                                        | False                                        | False                                        |
| -2 | False                                        | False                                        | False                                        | False                                        |
| -1 | False                                        | False                                        | False                                        | False                                        |
|  1 | False                                        | False                                        | True                                         | False                                        |
|  2 | False                                        | False                                        | True                                         | False                                        |
|  3 | False                                        | False                                        | True                                         | False                                        |
|  4 | False                                        | False                                        | True                                         | False                                        |
+----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+

오류 예

부울로 변환할 수 없는 문자열이 이 함수에 전달되는 경우, 함수에서 오류가 발생합니다.

select boolxor_agg('invalid type');

100037 (22018): Boolean value 'invalid_type' is not recognized
맨 위로 이동