BITXOR_AGG
BITXOR_AGG
BITXOR_AGG() 함수는 그룹 안의 모든 비-NULL 숫자 레코드에 대한 비트별 XOR 값을 반환해요.
각 비트 위치에서 1로 설정된 행이 짝수 개면 그 비트에 대해 0을 반환하고, 1로 설정된 행이 홀수 개면 그 비트에 대해 1을 반환해요.
그룹 안의 모든 레코드가 NULL이거나 그룹이 비어 있으면 NULL을 반환해요.
본문
문법
집계 함수(Aggregate function)
BITXOR_AGG( [ DISTINCT ] <expr1> )
윈도우 함수(Window function)
BITXOR_AGG( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
인자
expr1 — 비트별 XOR을 구할 숫자 표현식이에요.
반환
반환 값의 데이터 타입은 NUMBER(38, 0)이에요.
사용 메모
- 숫자 값은 가장 가까운 INTEGER 데이터 타입으로 집계돼요. 소수와 부동소수 값은 집계 전에 가장 가까운 정수로 반올림돼요.
- 문자/텍스트 컬럼(VARCHAR, CHAR, STRING 등)을 집계하면 입력 값을 암시적으로 FLOAT로 캐스팅한 뒤 가장 가까운 정수로 반올림해요. 캐스팅이 불가능하면 값은 NULL로 처리돼요.
- 이 함수에 DISTINCT 키워드를 지정할 수 있지만 아무 효과가 없어요.
- 이 함수를 윈도우 함수로 호출할 때는 다음을 지원하지 않아요.
예제
테이블을 만들고 데이터를 로드해요.
CREATE OR REPLACE TABLE bitwise_example
(k INT, d DECIMAL(10,5), s1 VARCHAR(10), s2 VARCHAR(10));
INSERT INTO bitwise_example VALUES
(15, 1.1, '12', 'one'),
(26, 2.9, '10', 'two'),
(12, 7.1, '7.9', 'two'),
(14, NULL, NULL, 'null'),
(8, NULL, NULL, 'null'),
(NULL, 9.1, '14', 'nine');
데이터를 표시해요.
SELECT k AS k_col, d AS d_col, s1, s2
FROM bitwise_example
ORDER BY k_col;
+-------+---------+------+------+
| K_COL | D_COL | S1 | S2 |
|-------+---------+------+------|
| 8 | NULL | NULL | null |
| 12 | 7.10000 | 7.9 | two |
| 14 | NULL | NULL | null |
| 15 | 1.10000 | 12 | one |
| 26 | 2.90000 | 10 | two |
| NULL | 9.10000 | 14 | nine |
+-------+---------+------+------+
데이터를 조회해요.
SELECT BITXOR_AGG(k),
BITXOR_AGG(d),
BITXOR_AGG(s1)
FROM bitwise_example;
+---------------+---------------+----------------+
| BITXOR_AGG(K) | BITXOR_AGG(D) | BITXOR_AGG(S1) |
|---------------+---------------+----------------|
| 31 | 12 | 0 |
+---------------+---------------+----------------+
데이터를 조회하며 GROUP BY 절을 사용해요.
SELECT s2,
BITXOR_AGG(k),
BITXOR_AGG(d)
FROM bitwise_example
GROUP BY s2
ORDER BY 3;
+------+---------------+---------------+
| S2 | BITXOR_AGG(K) | BITXOR_AGG(D) |
|------+---------------+---------------|
| one | 15 | 1 |
| two | 22 | 4 |
| nine | NULL | 9 |
| null | 6 | NULL |
+------+---------------+---------------+
이 함수에 NUMBER 값으로 변환할 수 없는 문자열을 전달하면 오류가 반환돼요.
SELECT BITXOR_AGG(s2)
FROM bitwise_example;
100038 (22018): Numeric value 'one' is not recognized