【发布时间】:2019-02-03 10:36:10
【问题描述】:
我遇到了表达式(Postgres):
SELECT
...,
CASE WHEN colXX in (...) THEN sum(colYY) END
FROM tbl
WHERE ...
GROUP BY ..., colXX;
这让我大吃一惊。好的,如果CASE WHEN 有GROUP BY 就有意义了。
谁能确认在CASE WHEN 中使用聚合是一些专有的SQL 扩展?
我通常使用这样的形式:
SELECT
...,
sum(CASE WHEN colXX in (...) THEN colYY END)
FROM tbl ...;
即使colXX 不在GROUP BY 中也有效,并且它具有清晰的语义。
PostgreSQL 和 HSQLDB 也对以前的形式有奇特的语法:
SELECT
...,
sum(colYY) FILTER (WHERE colXX in (...))
FROM tbl ...;
所以我的问题是:哪些标准或专有扩展定义了 CASE 内部的聚合,这种表达的语义是什么,以及在使用这种构造时有哪些限制?
【问题讨论】:
标签: sql postgresql