PostgreSQL查询:统计各唯一名称对应Value>0的行数
PostgreSQL查询:按名称统计Value大于0的行数
你可以通过在分组查询中结合CASE表达式和聚合函数实现需求,以下是两种可行写法:
方法一:使用COUNT + CASE
SELECT "Name", COUNT(CASE WHEN "Value" > 0 THEN 1 END) AS positive_value_count FROM your_table_name -- 替换为你的实际表名 GROUP BY "Name" ORDER BY "Name";
逻辑说明:
CASE WHEN "Value" > 0 THEN 1 END:仅当Value大于0时返回1,否则返回NULLCOUNT()函数会自动忽略NULL值,因此最终统计的就是每个名称下Value>0的行数- 对于所有
Value都不大于0的名称(比如Ryan),COUNT结果会是0,符合你的期望
方法二:使用SUM + CASE
SELECT "Name", SUM(CASE WHEN "Value" > 0 THEN 1 ELSE 0 END) AS positive_value_count FROM your_table_name -- 替换为你的实际表名 GROUP BY "Name" ORDER BY "Name";
逻辑说明:
- 满足
Value>0条件时加1,不满足时加0,通过SUM求和得到符合条件的总行数 - 这种写法和方法一效果完全一致,可根据个人习惯选择
注意:请将SQL中的your_table_name替换为你的实际表名;另外由于Name和Value是带引号的标识符,说明你的表字段名是大小写敏感的,查询时需保持一致。
内容的提问来源于stack exchange,提问作者Ethan
相关产品推荐
相关产品推荐

