NULL 处理
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
某些窗口函数可能提供特殊的 NULL
处理子句,允许从函数评估中排除 NULL
值。
这些包括
可能的子句值包括
-
IGNORE NULLS
: 在函数评估中不考虑NULL
值。 -
RESPECT NULLS
: 默认值。
一个例子说明了这个可选子句的实用性
SELECT id, amount, lead(amount) OVER (ORDER BY id) AS respect_nulls, lead(amount) IGNORE NULLS OVER (ORDER BY id) AS ignore_nulls FROM (VALUES (1, 10.0), (2, 15.0), (3, 20.0), (4, null), (5, 30.0), (6, 35.0) ) AS t (id, amount)
结果是
+----+--------+---------------+--------------+ | ID | AMOUNT | RESPECT_NULLS | IGNORE_NULLS | +----+--------+---------------+--------------+ | 1 | 10 | 15 | 15 | | 2 | 15 | 20 | 20 | | 3 | 20 | | 30 | <-- difference here | 4 | | 30 | 30 | | 5 | 30 | 35 | 35 | | 6 | 35 | | | +----+--------+---------------+--------------+
如果您愿意,IGNORE NULLS
子句允许跳过所有包含 NULL
值的行,直到找到下一个非 NULL
值。如果在窗口中没有找到下一行,例如上面的例子中的最后一行,这样的函数仍然可能返回 NULL
!
方言支持
此示例使用 jOOQ
lead(BOOK.ID).ignoreNulls().over(orderBy(BOOK.ID))
翻译成以下特定方言的表达式
BigQuery, DuckDB, Vertica
lead(BOOK.ID IGNORE NULLS) OVER (ORDER BY BOOK.ID)
Databricks, Exasol, H2, Informix, Oracle, Redshift, SQLServer, Snowflake, Teradata, Trino
lead(BOOK.ID) IGNORE NULLS OVER (ORDER BY BOOK.ID)
DB2
lead(BOOK.ID, 'IGNORE NULLS') OVER (ORDER BY BOOK.ID)
ASE, Access, Aurora MySQL, Aurora Postgres, ClickHouse, CockroachDB, Derby, Firebird, HSQLDB, Hana, MariaDB, MemSQL, MySQL, Postgres, SQLDataWarehouse, SQLite, Sybase, YugabyteDB
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意倾听!