PostgreSQL中如何按IN子句内的每个值分别统计数量
在PostgreSQL中获取IN子句中每个值的单独统计数
你可以通过以下两种常用方法实现每个值的单独计数需求:
方法1:使用GROUP BY(仅返回存在匹配的数值)
这是最直接的实现方式,通过GROUP BY按目标字段分组统计:
SELECT column_id, COUNT(*) AS count FROM table_name WHERE column_id IN (value1, value2, value3) GROUP BY column_id;
执行后会返回表中存在匹配记录的每个column_id及其对应计数,结果示例:
| column_id | count |
|---|---|
| value1 | 10 |
| value2 | 5 |
| value3 | 3 |
如果某个指定值在表中没有对应记录,不会出现在结果集中。
方法2:生成临时数据集关联查询(返回所有指定数值,包括计数为0的)
如果需要显示所有你指定的value1/value2/value3——哪怕该值在表中没有匹配记录(计数为0),可以用VALUES子句生成临时数据集,再通过LEFT JOIN关联原表统计:
SELECT target_values.val, COUNT(table_name.column_id) AS count FROM (VALUES (value1), (value2), (value3)) AS target_values(val) LEFT JOIN table_name ON table_name.column_id = target_values.val GROUP BY target_values.val;
这种方式会返回所有指定值,无匹配项的计数显示为0,结果示例:
| val | count |
|---|---|
| value1 | 10 |
| value2 | 0 |
| value3 | 3 |
内容的提问来源于stack exchange,提问作者Knowledge
相关产品推荐
相关产品推荐

