You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何正确实现sum(color = 'red')的条件统计?

PostgreSQL 无WHERE子句条件计数正确写法

报错原因

你执行的SELECT sum(color = ‘red’) FROM table报错的核心原因是:PostgreSQL 不支持布尔类型直接作为sum()聚合函数的入参,color = 'red'返回的是布尔值,sum()仅支持数值类型的聚合计算,因此会抛出类型不匹配的异常。

可行的两种实现写法

写法1:布尔值强转数值后求和

将布尔判断结果强制转换为int类型,true会转为1,false转为0,求和结果就是color值为red的记录总数:

SELECT sum((color = 'red')::int) FROM your_table;

写法2:使用FILTER语法(更推荐)

PostgreSQL 原生支持聚合函数的FILTER过滤语法,可读性更高,也符合SQL标准规范,不需要额外做类型转换:

SELECT count(*) FILTER (WHERE color = 'red') FROM your_table;

该写法的优势是可以非常方便地同时统计多个不同条件的计数,不需要添加WHERE子句或者多表关联,示例如下:

SELECT
  count(*) FILTER (WHERE color = 'red') AS red_total,
  count(*) FILTER (WHERE color = 'blue') AS blue_total,
  count(*) FILTER (WHERE color = 'green') AS green_total
FROM your_table;

注意事项

  • SQL中的引号需要使用英文半角单引号',不要使用中文全角引号‘’,否则会触发语法错误。
  • 代码中的your_table需要替换为你实际使用的表名。

内容的提问来源于stack exchange,提问作者iFrong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:42:02