零/NULL 大小写技巧

Wil*_*son 3 oracle terminology case sum oracle-19c

在《SQL 入门》一书中,Thomas Nield 谈到了一种他称之为“零/空情况技巧”的技术:

有一个简单但功能强大的工具,可以将不同的过滤条件应用于不同的聚合。我们可以在两个单独的列中创建龙卷风存在与不存在时的单独总计数:

SELECT year, month,
SUM(CASE WHEN tornado = 1 THEN precipitation ELSE 0 END) as tornado_precipitation,
SUM(CASE WHEN tornado = 0 THEN precipitation ELSE 0 END) as non_tornado_precipitation
FROM station_data
WHERE year >= 1990
GROUP BY year, month
Run Code Online (Sandbox Code Playgroud)

我们有效地做的就是当tornado = 1 或tornado = 0 时去掉WHERE 条件,然后将这些条件移至SUM() 函数内的CASE 表达式。如果满足条件,则将降水值添加到总和中。如果不是,则添加 0,但没有效果。我们对两列进行这些操作,分别针对龙卷风存在时和不存在龙卷风时进行。

您可以使 CASE 表达式具有所需数量的条件/值对,从而使您能够通过聚合对值进行高度特定的截取。您还可以使用此技巧来模拟交叉表和数据透视表,将聚合表示为单独的列而不是行。一个常见的示例是进行当年/上一年分析,因为您可以使用不同的列来表示不同的年份。


作为新手,该技术似乎对于总结数据非常有用。我想在线查找该技术以获取更多信息。

该书的作者将该技术称为“零/空案例技巧”。但当我用谷歌搜索这个词时,我没有得到很多结果。

问题:

该技术有一个普遍接受的名称吗?(在线搜索时会产生更多结果)

Pau*_*ite 5

它被称为:

它可以显式地使用CASE或等效地使用FILTERSQL:2003 引入的语法来编写,例如COUNT(*) FILTER (WHERE tornado = 1)。目前 Postgres、HSQLDB 和 SQLite 支持新语法。