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

按Top-1管理层级分组统计下属应用成本总和,单查询可行吗?

单条SQL实现Top-1层级用户下属应用成本统计

当然可以通过单条SQL查询搞定这个需求!核心思路是用**递归公共表表达式(CTE)**来梳理用户的层级关系,找出每个top-1用户的所有下属(包括直接和间接的),再关联Applications表汇总成本。

具体SQL语句

WITH RecursiveUserHierarchy AS (
    -- 锚点成员:筛选出top-1层级用户(直接汇报给top用户1的用户)
    SELECT 
        u.id AS top1_id,
        u.id AS user_id
    FROM Users u
    WHERE u.mgr_id = 1  -- 对应题目中的top层级用户id
    UNION ALL
    -- 递归成员:遍历所有下属用户,关联到对应的top1分组
    SELECT 
        ruh.top1_id,
        u.id AS user_id
    FROM Users u
    JOIN RecursiveUserHierarchy ruh ON u.mgr_id = ruh.user_id
)
-- 关联应用表,按top1_id分组统计总成本
SELECT 
    ruh.top1_id AS id,
    SUM(a.cost) AS cost
FROM RecursiveUserHierarchy ruh
JOIN Applications a ON ruh.user_id = a.user_id
GROUP BY ruh.top1_id
ORDER BY ruh.top1_id;

代码逻辑拆解

  1. 递归CTE RecursiveUserHierarchy:
    • 锚点部分:先定位所有top-1层级的用户(id为2、3),同时将他们自身归入对应的top1分组。
    • 递归部分:逐层向下遍历用户层级,把每个下属用户(包括间接下属)都关联到对应的top1_id,确保所有下属都被纳入统计范围。
  2. 关联统计:将递归得到的层级关系表与Applications表关联,按top1_id分组求和,最终得到每个top-1用户下属的应用成本总和。

结果验证

运行这条SQL后,会得到你预期的输出:

id | cost
2 | 165
3 | 98

计算逻辑对应:

  • top-1用户2的统计范围:自身成本25 + 用户4的85 + 用户5的50+5 = 165
  • top-1用户3的统计范围:自身成本80 + 用户6的8 + 用户7的10 = 98

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:18:14