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

如何用MySQL递归SQL统计分类父级的总订单金额?

实现方案:MySQL递归查询计算父级分类总金额

当然可以!这个需求在MySQL里完全能实现,核心是要处理分类的层级递归关系,把所有子分类(包括多级后代)的金额都归集到它们的顶级父分类上。下面是具体的SQL实现:

WITH RECURSIVE category_hierarchy AS (
    -- 第一步:先找出所有顶级父分类(parent_id为NULL的分类)
    SELECT id, name, id AS top_parent_id
    FROM category
    WHERE parent_id IS NULL
    UNION ALL
    -- 第二步:递归遍历所有子分类,将它们关联到对应的顶级父分类
    SELECT c.id, c.name, ch.top_parent_id
    FROM category c
    INNER JOIN category_hierarchy ch ON c.parent_id = ch.id
)
-- 第三步:关联订单表,按顶级父分类分组计算总金额
SELECT 
    ch.top_parent_id AS category,
    SUM(orw.amount) AS total
FROM category_hierarchy ch
INNER JOIN orderrows orw ON ch.id = orw.category
GROUP BY ch.top_parent_id
ORDER BY ch.top_parent_id;

代码思路解释:

  1. 递归CTE构建层级关系:category_hierarchy 这个递归公共表表达式(CTE)会生成每个分类对应的顶级父分类ID:
    • 锚点部分:先筛选出所有没有父分类的顶级分类,它们的top_parent_id就是自己的ID;
    • 递归部分:不断将子分类和上一层的分类关联,把父分类的top_parent_id传递给子分类,直到遍历完所有层级的分类。
  2. 关联订单表聚合求和:把生成的层级表和orderrows表关联,按顶级父分类ID分组,对amount求和,就能得到每个父分类包含所有子分类的总金额。

运行这段SQL后,你会得到完全符合预期的结果:

categorytotal
1200
2600

如果你的MySQL版本低于8.0(不支持递归CTE),可以使用多次自连接的方式处理,但递归CTE的写法更简洁、易维护,也能适配任意深度的分类层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:14