按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;
代码逻辑拆解
- 递归CTE
RecursiveUserHierarchy:- 锚点部分:先定位所有top-1层级的用户(id为2、3),同时将他们自身归入对应的top1分组。
- 递归部分:逐层向下遍历用户层级,把每个下属用户(包括间接下属)都关联到对应的top1_id,确保所有下属都被纳入统计范围。
- 关联统计:将递归得到的层级关系表与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
相关产品推荐
相关产品推荐

