BOOLXOR_AGG

BOOLXOR_AGG

그룹 안의 Boolean 레코드 중 정확히 하나만 TRUE로 평가되면 TRUE를 반환하는 집계·윈도우 함수예요. 그룹의 모든 레코드가 NULL이거나 그룹이 비어 있으면 NULL을 반환해요.

출처: 공식 문서

본문

그룹 안의 Boolean 레코드 중 정확히 하나만 TRUE로 평가되면 TRUE를 반환합니다.

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

참고 (See also): BOOLXOR, BOOLAND_AGG, BOOLOR_AGG

구문 (Syntax)

집계 함수 (Aggregate function)

BOOLXOR_AGG( <expr> )

윈도우 함수 (Window function)

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

인자 (Arguments)

입력 표현식은 boolean으로 평가되거나 boolean으로 변환될 수 있는 표현식이어야 합니다.

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

반환값 (Returns)

이 함수는 BOOLEAN 타입의 값을 반환합니다.

사용 참고 사항 (Usage notes)

  • 숫자 값은 0이 아니면 TRUE로 변환됩니다.

  • 문자열과 이진 값은 Boolean 값으로 변환될 수 없기 때문에 지원되지 않습니다.

  • 이 함수가 윈도우 함수로 호출되면 다음을 지원하지 않습니다:

  • OVER 절 안의 ORDER BY 절.

  • 명시적 윈도우 프레임.

예제 (Examples)

다음 예제는 입력 값 중 정확히 하나가 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           |
+-----------------+-----------------+-----------------+-----------------+

윈도우 함수 (Window function)

이 예제는 앞선 예제와 비슷하지만, 입력 행을 두 개의 파티션(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                                        |
+----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+

오류 예제 (Error example)

Boolean으로 변환할 수 없는 문자열이 이 함수에 전달되면 오류를 발생시킵니다:

select boolxor_agg('invalid type');

100037 (22018): Boolean value 'invalid_type' is not recognized

더 알아보기 (Learn more)