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

如何关联MySQL两张表统计每个用户对应的周六事件记录数量

正确SQL查询写法

核心问题说明:

  • 此前使用INNER JOIN返回结果错误,是因为内连接会过滤掉没有关联事件的用户,必须用LEFT JOIN保留accounts表的全量用户
  • 周六的过滤条件不能放在WHERE子句中,否则会过滤掉左连接后无匹配事件的空行,导致没有周六事件的用户也被排除,建议将过滤条件放到JOIN的关联条件中,或者在聚合函数内做判断

写法1:过滤条件写在LEFT JOIN的ON子句中(推荐,性能更优)

SELECT 
    a.name AS 用户名,
    COUNT(e.id) AS 周六次数
FROM accounts a
LEFT JOIN events e 
    ON a.id = e.account_id 
    AND DAYOFWEEK(e.date) = 7 -- MySQL中DAYOFWEEK返回值1为周日,7为周六
GROUP BY a.id, a.name;

写法2:过滤条件写在聚合函数内

SELECT 
    a.name AS 用户名,
    SUM(CASE WHEN DAYOFWEEK(e.date) = 7 THEN 1 ELSE 0 END) AS 周六次数
FROM accounts a
LEFT JOIN events e ON a.id = e.account_id
GROUP BY a.id, a.name;

结果验证

对应你给出的示例数据,两种写法返回结果一致:

用户名周六次数
Pete2
Josh1
Harry0

内容的提问来源于stack exchange,提问作者T. Hægh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:24:03