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

如何用SQL子查询统计各经理及其团队的总商品数与总收入?

没问题,这就帮你搞定这个SQL统计需求!先咱们对齐下前提哈——根据你说的items_revenue表,我先默认它有这些核心字段(要是实际字段名不一样,你直接替换就行):user_id(每个成员/经理的唯一标识)、user_name(人名)、is_manager(1代表是经理)、manager_id(下属对应的直属经理ID)、total_items(该成员的商品总数)、revenue(该成员的收入)。

接下来要实现的是:给每个经理算出他自己加所有下属的总商品数和总收入,还不能用CASE表达式,得用子查询。我给你两种可行的写法,按需选就行:

写法一:关联子查询(直观易懂)

这种写法直接针对每个经理,用子查询揪出他的整个团队(包括自己)然后求和,逻辑很清晰:

SELECT
    m.user_id AS manager_id,
    m.user_name AS manager_name,
    -- 子查询统计团队总商品数:包含经理自己+下属
    (SELECT SUM(total_items) 
     FROM items_revenue t
     WHERE t.manager_id = m.user_id OR t.user_id = m.user_id) AS team_total_items,
    -- 子查询统计团队总收入
    (SELECT SUM(revenue) 
     FROM items_revenue t
     WHERE t.manager_id = m.user_id OR t.user_id = m.user_id) AS team_total_revenue
FROM items_revenue m
WHERE m.is_manager = 1
GROUP BY m.user_id, m.user_name;

逻辑拆解:

  • 外层先捞出来所有经理(m.is_manager = 1),这是我们要统计的主体;
  • 每个子查询都对应当前经理m,筛选出两类人:要么是经理自己(t.user_id = m.user_id),要么是他的直接下属(t.manager_id = m.user_id),然后对这两类人的商品数和收入分别求和;
  • 最后按经理的ID和名称分组,保证每个经理只出一行结果。

写法二:子查询生成团队列表后聚合(性能更优)

如果你的数据量比较大,这种写法可能更高效——先通过JOIN把经理和他的团队成员拼到一起,再外层聚合求和,全程没用到CASE:

SELECT
    manager_id,
    manager_name,
    SUM(total_items) AS team_total_items,
    SUM(revenue) AS team_total_revenue
FROM (
    -- 内层子查询:把每个经理和他的团队成员(含自己)关联起来
    SELECT
        m.user_id AS manager_id,
        m.user_name AS manager_name,
        t.total_items,
        t.revenue
    FROM items_revenue m
    JOIN items_revenue t ON t.manager_id = m.user_id OR t.user_id = m.user_id
    WHERE m.is_manager = 1
) AS team_data
GROUP BY manager_id, manager_name;

逻辑拆解:

  • 内层子查询通过JOIN,把每个经理m和所有属于他的团队成员(自己+下属)做关联,生成一张包含经理信息+团队成员业绩的中间表;
  • 外层直接对这张中间表按经理分组,求和所有成员的商品数和收入,得到团队总和。

要是你的表字段和我假设的不一样(比如用parent_id代替manager_id,或者没有user_name),直接替换对应的字段名就可以用啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:49