BIT_XNOR_AGG
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
一个聚合函数,用于对数据集执行等效于 BIT_XNOR 函数 的操作。换句话说,结果位是
-
如果参数在组中奇数行位置
p处为1,则位置p处为0。 -
如果参数在组中偶数行位置
p处为0,则位置p处为1。
与大多数聚合函数一样,NULL 值不进行聚合。
SELECT bit_xnor_agg(ID), bit_xnor_agg(AUTHOR_ID) FROM BOOK
create.select(
bitXNorAgg(BOOK.ID),
bitXNorAgg(BOOK.AUTHOR_ID))
.from(BOOK)
产生
+--------------+--------------+ | bit_xnor_agg | bit_xnor_agg | +--------------+--------------+ | -5 | -1 | +--------------+--------------+
方言支持
此示例使用 jOOQ
bitXNorAgg(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
~(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
bitNot(groupBitXor(BOOK.ID))
DB2, Hana, Informix
bitnot((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
bit_not((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
bin_not((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
bit_xnor_agg(BOOK.ID)
HSQLDB
((0 - (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)) - 1)
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))
Oracle
((0 - bit_xor_agg(BOOK.ID)) - 1)
Snowflake
bitnot(bit_xor_agg(BOOK.ID))
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
bitnot((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
bitwise_not((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
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!