MySQL多表关联分组:按国家统计各类型帖子数量问题
解决方案:按国家分组统计各类型帖子数量
你需要用条件聚合来实现每个帖子类型的单独计数,也就是结合SUM()和CASE WHEN语句,针对每个类型做判断累加。同时记得用LEFT JOIN关联两张表,这样即使某个国家没有任何帖子,也会被保留并显示0值。
完整的查询语句如下:
SELECT u.country, SUM(CASE WHEN p.type = 'Social' THEN 1 ELSE 0 END) AS social_count, SUM(CASE WHEN p.type = 'Economic' THEN 1 ELSE 0 END) AS economic_count, SUM(CASE WHEN p.type = 'Culture' THEN 1 ELSE 0 END) AS culture_count FROM User u LEFT JOIN Post p ON u.id = p.userId GROUP BY u.country;
关键部分解释:
LEFT JOIN:确保所有国家(哪怕没有对应的帖子)都会出现在结果里,没有帖子的类型计数会显示0,而不是被过滤掉。SUM(CASE WHEN ...):对每个帖子类型进行条件判断,如果匹配就加1,否则加0,最终得到该类型在对应国家的总数量。GROUP BY u.country:按国家分组,让每个国家只显示一行统计结果。
举个例子,结果会像这样:
| country | social_count | economic_count | culture_count |
|---|---|---|---|
| UK | 2 | 1 | 0 |
| US | 0 | 3 | 2 |
内容的提问来源于stack exchange,提问作者Fawzan
相关产品推荐
相关产品推荐

