BIT_XOR_AGG
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
一个聚合函数,用于对数据集执行等同于 BIT_XOR 函数 的操作。换句话说,如果
-
参数在组中奇数行的位置
p处为1,则结果位在位置p处为1。 -
如果参数在组中偶数行的位置
p处为0,则结果位在位置p处为0。
与大多数聚合函数一样,NULL 值不进行聚合。
SELECT bit_xor_agg(ID), bit_xor_agg(AUTHOR_ID) FROM BOOK
create.select(
bitXorAgg(BOOK.ID),
bitXorAgg(BOOK.AUTHOR_ID))
.from(BOOK)
产生
+-------------+-------------+ | bit_xor_agg | bit_xor_agg | +-------------+-------------+ | 4 | 0 | +-------------+-------------+
方言支持
此示例使用 jOOQ
bitXorAgg(BOOK.ID.coerce(TINYINT))
翻译成以下特定方言的表达式
ASE, Redshift, SQLDataWarehouse, SQLServer
(CASE
WHEN (count(CASE
WHEN (BOOK.ID & 1) = 1 THEN 1
END) % 2) = 1 THEN 1
ELSE 0
END + CASE
WHEN (count(CASE
WHEN (BOOK.ID & 2) = 2 THEN 1
END) % 2) = 1 THEN 2
ELSE 0
END + CASE
WHEN (count(CASE
WHEN (BOOK.ID & 4) = 4 THEN 1
END) % 2) = 1 THEN 4
ELSE 0
END + CASE
WHEN (count(CASE
WHEN (BOOK.ID & 8) = 8 THEN 1
END) % 2) = 1 THEN 8
ELSE 0
END + CASE
WHEN (count(CASE
WHEN (BOOK.ID & 16) = 16 THEN 1
END) % 2) = 1 THEN 16
ELSE 0
END + CASE
WHEN (count(CASE
WHEN (BOOK.ID & 32) = 32 THEN 1
END) % 2) = 1 THEN 32
ELSE 0
END + CASE
WHEN (count(CASE
WHEN (BOOK.ID & 64) = 64 THEN 1
END) % 2) = 1 THEN 64
ELSE 0
END + CASE
WHEN (count(CASE
WHEN (BOOK.ID & -128) = -128 THEN 1
END) % 2) = 1 THEN -128
ELSE 0
END)
Aurora MySQL, Oracle, Snowflake
bit_xor_agg(BOOK.ID)
Aurora Postgres, CockroachDB, YugabyteDB
(CASE
WHEN mod(
count(*) FILTER (WHERE (BOOK.ID & 1) = 1),
2
) = 1 THEN 1
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE (BOOK.ID & 2) = 2),
2
) = 1 THEN 2
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE (BOOK.ID & 4) = 4),
2
) = 1 THEN 4
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE (BOOK.ID & 8) = 8),
2
) = 1 THEN 8
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE (BOOK.ID & 16) = 16),
2
) = 1 THEN 16
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE (BOOK.ID & 32) = 32),
2
) = 1 THEN 32
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE (BOOK.ID & 64) = 64),
2
) = 1 THEN 64
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE (BOOK.ID & -128) = -128),
2
) = 1 THEN -128
ELSE 0
END)
BigQuery, Databricks, DuckDB, MariaDB, MySQL, Postgres, Sybase
bit_xor(BOOK.ID)
ClickHouse
groupBitXor(BOOK.ID)
DB2, Hana, Informix
(CASE
WHEN mod(
count(CASE
WHEN bitand(
BOOK.ID,
1
) = 1 THEN 1
END),
2
) = 1 THEN 1
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bitand(
BOOK.ID,
2
) = 2 THEN 1
END),
2
) = 1 THEN 2
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bitand(
BOOK.ID,
4
) = 4 THEN 1
END),
2
) = 1 THEN 4
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bitand(
BOOK.ID,
8
) = 8 THEN 1
END),
2
) = 1 THEN 8
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bitand(
BOOK.ID,
16
) = 16 THEN 1
END),
2
) = 1 THEN 16
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bitand(
BOOK.ID,
32
) = 32 THEN 1
END),
2
) = 1 THEN 32
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bitand(
BOOK.ID,
64
) = 64 THEN 1
END),
2
) = 1 THEN 64
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bitand(
BOOK.ID,
-128
) = -128 THEN 1
END),
2
) = 1 THEN -128
ELSE 0
END)
Exasol
(CASE
WHEN mod(
count(CASE
WHEN bit_and(
BOOK.ID,
1
) = 1 THEN 1
END),
2
) = 1 THEN 1
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bit_and(
BOOK.ID,
2
) = 2 THEN 1
END),
2
) = 1 THEN 2
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bit_and(
BOOK.ID,
4
) = 4 THEN 1
END),
2
) = 1 THEN 4
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bit_and(
BOOK.ID,
8
) = 8 THEN 1
END),
2
) = 1 THEN 8
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bit_and(
BOOK.ID,
16
) = 16 THEN 1
END),
2
) = 1 THEN 16
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bit_and(
BOOK.ID,
32
) = 32 THEN 1
END),
2
) = 1 THEN 32
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bit_and(
BOOK.ID,
64
) = 64 THEN 1
END),
2
) = 1 THEN 64
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN bit_and(
BOOK.ID,
-128
) = -128 THEN 1
END),
2
) = 1 THEN -128
ELSE 0
END)
Firebird
(CASE
WHEN mod(
count(*) FILTER (WHERE bin_and(
BOOK.ID,
1
) = 1),
2
) = 1 THEN 1
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bin_and(
BOOK.ID,
2
) = 2),
2
) = 1 THEN 2
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bin_and(
BOOK.ID,
4
) = 4),
2
) = 1 THEN 4
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bin_and(
BOOK.ID,
8
) = 8),
2
) = 1 THEN 8
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bin_and(
BOOK.ID,
16
) = 16),
2
) = 1 THEN 16
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bin_and(
BOOK.ID,
32
) = 32),
2
) = 1 THEN 32
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bin_and(
BOOK.ID,
64
) = 64),
2
) = 1 THEN 64
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bin_and(
BOOK.ID,
-128
) = -128),
2
) = 1 THEN -128
ELSE 0
END)
H2, HSQLDB
(CASE
WHEN mod(
count(*) FILTER (WHERE bitand(
BOOK.ID,
1
) = 1),
2
) = 1 THEN 1
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitand(
BOOK.ID,
2
) = 2),
2
) = 1 THEN 2
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitand(
BOOK.ID,
4
) = 4),
2
) = 1 THEN 4
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitand(
BOOK.ID,
8
) = 8),
2
) = 1 THEN 8
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitand(
BOOK.ID,
16
) = 16),
2
) = 1 THEN 16
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitand(
BOOK.ID,
32
) = 32),
2
) = 1 THEN 32
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitand(
BOOK.ID,
64
) = 64),
2
) = 1 THEN 64
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitand(
BOOK.ID,
-128
) = -128),
2
) = 1 THEN -128
ELSE 0
END)
MemSQL
(CASE
WHEN mod(
count(CASE
WHEN (BOOK.ID & 1) = 1 THEN 1
END),
2
) = 1 THEN 1
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN (BOOK.ID & 2) = 2 THEN 1
END),
2
) = 1 THEN 2
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN (BOOK.ID & 4) = 4 THEN 1
END),
2
) = 1 THEN 4
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN (BOOK.ID & 8) = 8 THEN 1
END),
2
) = 1 THEN 8
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN (BOOK.ID & 16) = 16 THEN 1
END),
2
) = 1 THEN 16
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN (BOOK.ID & 32) = 32 THEN 1
END),
2
) = 1 THEN 32
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN (BOOK.ID & 64) = 64 THEN 1
END),
2
) = 1 THEN 64
ELSE 0
END + CASE
WHEN mod(
count(CASE
WHEN (BOOK.ID & -128) = -128 THEN 1
END),
2
) = 1 THEN -128
ELSE 0
END)
SQLite
(CASE WHEN (count(*) FILTER (WHERE (BOOK.ID & 1) = 1) % 2) = 1 THEN 1 ELSE 0 END + CASE WHEN (count(*) FILTER (WHERE (BOOK.ID & 2) = 2) % 2) = 1 THEN 2 ELSE 0 END + CASE WHEN (count(*) FILTER (WHERE (BOOK.ID & 4) = 4) % 2) = 1 THEN 4 ELSE 0 END + CASE WHEN (count(*) FILTER (WHERE (BOOK.ID & 8) = 8) % 2) = 1 THEN 8 ELSE 0 END + CASE WHEN (count(*) FILTER (WHERE (BOOK.ID & 16) = 16) % 2) = 1 THEN 16 ELSE 0 END + CASE WHEN (count(*) FILTER (WHERE (BOOK.ID & 32) = 32) % 2) = 1 THEN 32 ELSE 0 END + CASE WHEN (count(*) FILTER (WHERE (BOOK.ID & 64) = 64) % 2) = 1 THEN 64 ELSE 0 END + CASE WHEN (count(*) FILTER (WHERE (BOOK.ID & -128) = -128) % 2) = 1 THEN -128 ELSE 0 END)
Teradata
(CASE
WHEN (count(CASE
WHEN bitand(
BOOK.ID,
1
) = 1 THEN 1
END) MOD 2) = 1 THEN 1
ELSE 0
END + CASE
WHEN (count(CASE
WHEN bitand(
BOOK.ID,
2
) = 2 THEN 1
END) MOD 2) = 1 THEN 2
ELSE 0
END + CASE
WHEN (count(CASE
WHEN bitand(
BOOK.ID,
4
) = 4 THEN 1
END) MOD 2) = 1 THEN 4
ELSE 0
END + CASE
WHEN (count(CASE
WHEN bitand(
BOOK.ID,
8
) = 8 THEN 1
END) MOD 2) = 1 THEN 8
ELSE 0
END + CASE
WHEN (count(CASE
WHEN bitand(
BOOK.ID,
16
) = 16 THEN 1
END) MOD 2) = 1 THEN 16
ELSE 0
END + CASE
WHEN (count(CASE
WHEN bitand(
BOOK.ID,
32
) = 32 THEN 1
END) MOD 2) = 1 THEN 32
ELSE 0
END + CASE
WHEN (count(CASE
WHEN bitand(
BOOK.ID,
64
) = 64 THEN 1
END) MOD 2) = 1 THEN 64
ELSE 0
END + CASE
WHEN (count(CASE
WHEN bitand(
BOOK.ID,
-128
) = -128 THEN 1
END) MOD 2) = 1 THEN -128
ELSE 0
END)
Trino
(CASE
WHEN mod(
count(*) FILTER (WHERE bitwise_and(
BOOK.ID,
1
) = 1),
2
) = 1 THEN 1
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitwise_and(
BOOK.ID,
2
) = 2),
2
) = 1 THEN 2
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitwise_and(
BOOK.ID,
4
) = 4),
2
) = 1 THEN 4
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitwise_and(
BOOK.ID,
8
) = 8),
2
) = 1 THEN 8
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitwise_and(
BOOK.ID,
16
) = 16),
2
) = 1 THEN 16
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitwise_and(
BOOK.ID,
32
) = 32),
2
) = 1 THEN 32
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitwise_and(
BOOK.ID,
64
) = 64),
2
) = 1 THEN 64
ELSE 0
END + CASE
WHEN mod(
count(*) FILTER (WHERE bitwise_and(
BOOK.ID,
-128
) = -128),
2
) = 1 THEN -128
ELSE 0
END)
Vertica
hex_to_integer(to_hex(bit_xor(hex_to_binary(to_hex(BOOK.ID)))))
Access, Derby
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!