MySQL中如何将同表的多组SELECT分组查询结果合并为单表?
合并多组统计查询的解决方案
你可以通过条件聚合实现一次查询完成所有统计,结果直接整合在同一张表中,无需多次查询后合并:
SELECT orgname, COUNT(username) AS total_users, SUM(CASE WHEN two_fa_enabled = 1 THEN 1 ELSE 0 END) AS users_with_2FA, SUM(CASE WHEN two_fa_required_date IS NOT NULL AND two_fa_enabled IS NULL THEN 1 ELSE 0 END) AS users_pending_2FA FROM `user` GROUP BY orgname;
核心逻辑说明:
COUNT(username):直接统计每个组织的总用户数量SUM(CASE ...):通过条件判断实现分组计数,满足条件的行记为1,否则记为0,求和后得到对应分类的用户数- 该方案仅扫描一次
user表,相比多次查询再关联的方式性能更高效
如果你的数据库支持FILTER子句(例如PostgreSQL),可以使用更简洁的写法:
SELECT orgname, COUNT(username) AS total_users, COUNT(username) FILTER (WHERE two_fa_enabled = 1) AS users_with_2FA, COUNT(username) FILTER (WHERE two_fa_required_date IS NOT NULL AND two_fa_enabled IS NULL) AS users_pending_2FA FROM `user` GROUP BY orgname;
内容的提问来源于stack exchange,提问作者Antoine G
相关产品推荐
相关产品推荐

