如何在PostgreSQL中统计各列值为Y的记录总数
PostgreSQL电影分类统计SQL方案
假设你存储电影信息的表名为movies,如果实际表名不同可直接替换SQL中的对应名称:
方法1:UNION ALL实现(通用性强、逻辑直观)
该方法不依赖PostgreSQL专属语法,适配绝大多数SQL数据库:
SELECT 'Horror' AS "Category", COUNT(*) AS "count" FROM movies WHERE Horror = 'Y' UNION ALL SELECT 'Comedy' AS "Category", COUNT(*) AS "count" FROM movies WHERE Comedy = 'Y';
方法2:unnest数组实现(PostgreSQL专属、扩展性好)
如果后续新增分类列,只需要修改数组里的分类名称和过滤条件即可:
SELECT unnest(ARRAY['Horror', 'Comedy']) AS "Category", unnest(ARRAY[ COUNT(*) FILTER (WHERE Horror = 'Y'), COUNT(*) FILTER (WHERE Comedy = 'Y') ]) AS "count" FROM movies;
两种方法执行后都会输出你要求的两列结果,按你给出的示例数据输出如下:
| Category | count |
|---|---|
| Horror | 3 |
| Comedy | 2 |
内容的提问来源于stack exchange,提问作者NK1
相关产品推荐
相关产品推荐

