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

如何在LEFT JOIN中按用户统计不同Type值的出现次数?

解决方案

你的问题根源是缺少按用户分组的GROUP BY子句,导致聚合函数对全表统计,而非按单个用户计算。结合LEFT JOIN和条件聚合可以实现需求,以下是完整的SQL语句(假设第一张表名为assignment,第二张表名为user_info):

SELECT
    ui.`用户(User)`,
    ui.`电话(Telephone)`,
    SUM(CASE WHEN a.`类型(Type)` = 'Elementary' THEN 1 ELSE 0 END) AS `小学总数(Total Elementary)`,
    SUM(CASE WHEN a.`类型(Type)` = 'Middle' THEN 1 ELSE 0 END) AS `初中总数(Total Middle)`,
    SUM(CASE WHEN a.`类型(Type)` = 'High' THEN 1 ELSE 0 END) AS `高中总数(Total High)`
FROM `user_info` ui
LEFT JOIN `assignment` a ON ui.`用户(User)` = a.`负责人(AssignedTo)`
GROUP BY ui.`用户(User)`, ui.`电话(Telephone)`
ORDER BY ui.`用户(User)`;

关键说明:

  • LEFT JOIN确保用户表中的所有用户都会被保留,即使没有对应的任务记录
  • SUM(CASE...)是条件聚合的核心:匹配指定类型时返回1,否则返回0,求和后得到该用户对应类型的总数;也可以用COUNT(CASE WHEN a.类型(Type) = 'Elementary' THEN 1 END)替代,因为COUNT不会统计NULL值(不匹配时CASE默认返回NULL)
  • GROUP BY子句必须包含所有非聚合字段(这里是用户名和电话),否则数据库无法按用户拆分统计结果
  • 执行后会输出你需要的格式,无对应类型的用户会显示0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:05:41