PostgreSQL统计两类记录:关联批次与未关联批次的物品数量
解决方案:统计关联/未关联批次的物品数量
直接用条件聚合函数就能实现一行输出两类物品的统计结果,不需要用GROUP BY,具体SQL语句如下:
标准SQL写法(适配大多数数据库)
SELECT COUNT(CASE WHEN batch_id IS NOT NULL THEN 1 END) AS batched, COUNT(CASE WHEN batch_id IS NULL THEN 1 END) AS unbatched FROM items;
MySQL简化写法
SELECT COUNT(IF(batch_id IS NOT NULL, 1, NULL)) AS batched, COUNT(IF(batch_id IS NULL, 1, NULL)) AS unbatched FROM items;
原理说明
COUNT()函数只会统计非NULL值,所以当条件满足时返回1(会被计数),不满足时返回NULL(不会被计数)- 这种写法直接在SELECT里完成两类数据的统计,结果会以单行两列的形式返回,完全匹配你想要的输出格式
- 之所以不需要
GROUP BY,是因为GROUP BY会将不同分组拆分为多行记录,不符合你要在同一行展示两个统计值的需求
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

