MySQL如何在单条查询中同时获取列不同值总数及各值出现次数
解决方案
你可以通过以下两种方式实现单条查询同时拿到两个统计结果:
方法1:MySQL 8.0+ 窗口函数实现(推荐)
直接使用COUNT() OVER()窗口函数将总去重数量透传到每一行分组结果中:
SELECT GovernmentForm, COUNT(*) AS form_occurrence_count, COUNT(DISTINCT GovernmentForm) OVER () AS total_distinct_form_count FROM country GROUP BY GovernmentForm;
- 查询返回的每一行对应一个
GovernmentForm的取值和它的出现次数 - 所有行的
total_distinct_form_count值相同,就是该列去重后的总数量,等价你原来第一条查询的结果
方法2:兼容MySQL 5.x 子查询实现
如果你的MySQL版本不支持窗口函数,可以用子查询提前计算总去重数量:
SELECT GovernmentForm, COUNT(*) AS form_occurrence_count, (SELECT COUNT(DISTINCT GovernmentForm) FROM country) AS total_distinct_form_count FROM country GROUP BY GovernmentForm;
查询结果和方法1完全一致,仅底层执行逻辑不同。
内容的提问来源于stack exchange,提问作者Arsen
相关产品推荐
相关产品推荐

