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

如何用单条SQL按worker与type分组,关联两表计算汇总值?

问题背景

表结构

table1

date - type
22/05/23 - 1
22/05/23 - 1
22/05/23 - 2
22/05/24 - 1
22/05/25 - 2

table2

date - worker
22/05/23 - 20
22/05/24 - 23
22/05/25 - 17

原有实现方式

  1. 统计table1中每个date和type的记录数:
SELECT date, type, COUNT(*) FROM table1 GROUP BY date, type;

得到结果:

date - type - count
22/05/23 - 1 - 2
22/05/23 - 2 - 1
22/05/24 - 1 - 1
22/05/25 - 2 - 1
  1. 通过PHP循环,对每个日期执行SQL获取对应worker:
SELECT worker FROM table2 WHERE date = $date
  1. 最终合并得到目标结果:
date - type - count - worker
22/05/23 - 1 - 2 - 20
22/05/23 - 2 - 1 - 20
22/05/24 - 1 - 1 - 23
22/05/25 - 2 - 1 - 17

现需用单条SQL实现上述结果,并按worker和type分组计算汇总值用于薪酬计算。


正确SQL写法

1. 单条SQL获取合并后的基础结果

通过INNER JOIN关联两个表(若需保留table1中无对应worker的日期,改用LEFT JOIN),直接得到合并结果:

SELECT 
    t1.date,
    t1.type,
    COUNT(*) AS count,
    t2.worker
FROM table1 t1
INNER JOIN table2 t2 ON t1.date = t2.date
GROUP BY t1.date, t1.type, t2.worker;

这条SQL的输出和你之前分步操作的最终结果完全一致。

2. 按worker和type分组计算汇总值

如果需要统计每个worker处理每种type的总记录数,可直接基于关联后的表分组聚合:

SELECT 
    t2.worker,
    t1.type,
    COUNT(*) AS total_count
FROM table1 t1
INNER JOIN table2 t2 ON t1.date = t2.date
GROUP BY t2.worker, t1.type;

也可以通过子查询先按日期和type统计,再关联表2汇总:

SELECT 
    t2.worker,
    t1.type,
    SUM(count_per_date_type) AS total_count
FROM (
    SELECT 
        date,
        type,
        COUNT(*) AS count_per_date_type
    FROM table1
    GROUP BY date, type
) t1
INNER JOIN table2 t2 ON t1.date = t2.date
GROUP BY t2.worker, t1.type;

错误说明

你之前尝试的SQL存在语法错误:SUM函数内嵌套多表查询的写法不符合SQL规范,正确做法是通过JOIN关联两张表后,再根据需求分组聚合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:09:09