You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中统计表项数关联异表分类及去重项匹配分类?

MySQL分类关联统计解决方案

嘿,我来帮你搞定这两个MySQL统计需求,结合你给出的categories(Table1)和users(Table2)示例表,分两种场景逐一说明:

1. 统计分类对应的表项总数量

这个需求是要把每个分类和users表中属于该分类的记录总数关联起来,哪怕某个分类在users表中没有对应记录,也需要保留该分类的统计结果(显示为0)。

实现SQL

SELECT 
    c.group_name AS 分类名称,
    COUNT(u.id) AS 表项总数量
FROM categories c
LEFT JOIN users u ON c.group_name = u.groups
GROUP BY c.group_name, c.id
ORDER BY c.id;

结果说明

执行后会得到这样的结果:

分类名称表项总数量
football3
hockey2
tennis2

关键细节

  • 使用LEFT JOIN确保所有分类都会被返回,不会遗漏没有对应用户的分类;
  • COUNT(u.id)只会统计users表中存在匹配的记录数,没有匹配时会返回0;
  • GROUP BY按分类名称和id分组,保证结果和categories表的顺序一致。

2. 统计分类对应的去重项数

这个需求是要统计users表中每个分类下的唯一用户数量(去重后的项数),避免同一用户重复计入(如果users表存在同一用户多次关联同一分类的情况)。

实现SQL

SELECT 
    c.group_name AS 分类名称,
    COUNT(DISTINCT u.id) AS 去重后项数
FROM categories c
LEFT JOIN users u ON c.group_name = u.groups
GROUP BY c.group_name, c.id
ORDER BY c.id;

结果说明

针对你的示例数据,结果和第一个需求一致(因为每个用户只关联了一个分类),但如果users表中有同一用户多次属于同一分类的情况,这个查询会自动去重统计唯一用户数。

关键细节

  • COUNT(DISTINCT u.id)会对每个分类下的用户id去重后再计数,确保同一用户只被统计一次;
  • 同样使用LEFT JOIN保留所有分类,保证结果完整性。

内容的提问来源于stack exchange,提问作者Jonah Etuaful

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:03:02