PostgreSQL 分组聚合查询中 filter 子句替换 case when
在PostgreSQL中,FILTER
子句通常用于从聚合函数中过滤出符合特定条件的行。如果你想用CASE WHEN
表达式来达到同样的效果,可以在使用聚合函数(如SUM
、AVG
、COUNT
等)时将CASE WHEN
作为表达式直接嵌入。
以下是一个使用FILTER
子句的例子,以及如何用CASE WHEN
表达式重写的例子:
原始的使用FILTER
子句的查询:
SELECT
COUNT(*) FILTER (WHERE age > 30) AS over_30,
COUNT(*) FILTER (WHERE age BETWEEN 20 AND 30) AS between_20_30
FROM users;
使用CASE WHEN
表达式重写的查询:
SELECT
SUM(CASE WHEN age > 30 THEN 1 ELSE 0 END) AS over_30,
SUM(CASE WHEN age BETWEEN 20 AND 30 THEN 1 ELSE 0 END) AS between_20_30
FROM users;
在这两个例子中,我们都是计算了不同年龄段的用户数量,但是使用了不同的语法。第一个例子使用了FILTER
子句,而第二个例子使用了CASE WHEN
表达式。两种方法都可以达到相同的结果。
评论已关闭