宣言
BIT_AND(expr) OVER (analytic_clause)
説明
expr のすべてのビットに対するビット単位のANDを返します。
結果の型は、関数の引数値がバイナリ文字列として評価されるか数値として評価されるかによって決まります。引数値がバイナリ文字列タイプであり、かつ引数が16進数リテラル、Bitリテラル、または NULL リテラルではない場合、バイナリ文字列の評価が行われます。それ以外の場合は数値計算が行われ、必要に応じて引数値は符号なし64ビット整数に変換されます。
一致する行がない場合、BIT_AND() は引数値の長さと同じ長さのニュートラル値(すべてのビットが1に設定されている)を返します。すべての値が NULL でない限り、NULL 値は結果に影響しません。その場合、結果は引数値と同じ長さのニュートラル値です。
例
CREATE TABLE product_information(supplier_id INT, product_id INT,list_price numeric, min_price numeric);
INSERT INTO PRODUCT_INFORMATION VALUES ('102050', '1659', '45', NULL);
INSERT INTO PRODUCT_INFORMATION VALUES ('102050', '1770', NULL, '70');
INSERT INTO PRODUCT_INFORMATION VALUES ('102050', '2370', '305', '247');
INSERT INTO PRODUCT_INFORMATION VALUES ('102050', '2380', '750', '731');
INSERT INTO PRODUCT_INFORMATION VALUES ('102050', '3255', NULL, NULL);
INSERT INTO PRODUCT_INFORMATION VALUES ('102050', '1659', '35', NULL);
obclient> SELECT * FROM product_information;
+-------------+------------+------------+-----------+
| supplier_id | product_id | list_price | min_price |
+-------------+------------+------------+-----------+
| 102050 | 1659 | 45 | NULL |
| 102050 | 1770 | NULL | 70 |
| 102050 | 2370 | 305 | 247 |
| 102050 | 2380 | 750 | 731 |
| 102050 | 3255 | NULL | NULL |
| 102050 | 2380 | 750 | 731 |
| 102050 | 1659 | 35 | NULL |
+-------------+------------+------------+-----------+
7 rows in set
obclient> SELECT product_id, BIT_AND(min_price) OVER (partition by product_id) BITS FROM product_information;
+------------+----------------------+
| product_id | BITS |
+------------+----------------------+
| 1659 | 18446744073709551615 |
| 1659 | 18446744073709551615 |
| 1770 | 70 |
| 2370 | 247 |
| 2380 | 731 |
| 3255 | 18446744073709551615 |
+------------+----------------------+
6 rows in set