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

如何从两张关联业务表查询生成指定周期的统计数组结构?

解决方案

原有SQL的问题

你之前编写的查询存在三处核心错误:

  • 表关联逻辑错误:仅对tableA做自连接,没有关联存储名称数据的tableB
  • 关联类型错误:使用INNER JOIN会自动过滤掉没有匹配事件记录的分类,无法得到计数为0的结果
  • 缺少聚合逻辑:没有做分组计数,返回的是单条事件明细,而非按名称统计的数量

正确查询语句

SELECT 
    b.name AS Name,
    COUNT(a.id) AS Qty
FROM tableB b
LEFT JOIN tableA a 
    ON b.id = a.tableB_id 
    AND MONTH(a.date) = 10
GROUP BY b.id, b.name
ORDER BY b.id;

逻辑说明

  • 采用LEFT JOIN以tableB作为主表,保证所有分类名称都会出现在结果集中,不会因为10月没有对应事件就被过滤
  • 月份筛选条件写在JOIN的ON子句而非WHERE子句:如果写在WHERE中,左连接后无匹配事件的行的date字段为NULL,会被WHERE条件过滤,无法得到计数为0的结果
  • 用COUNT(a.id)统计匹配到的事件数量:无匹配事件时a.id为NULL,COUNT会自动忽略NULL值返回0,刚好符合需求
  • 按tableB的主键和名称分组,保证每个分类对应一条统计结果

执行上述查询后,直接返回的结果结构就和你需要的数组结构完全匹配,PHP无需额外做数据整理。

内容的提问来源于stack exchange,提问作者Jhon M. Curtis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:01