导读:本期聚焦于小伙伴创作的《MySQL中如何实现分组后的树形结构统计?结合递归CTE轻松搞定》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《MySQL中如何实现分组后的树形结构统计?结合递归CTE轻松搞定》有用,将其分享出去将是对创作者最好的鼓励。

在MySQL中处理带有父子关系的数据时,经常遇到既要按层级展示又要统计每层数据量的需求。借助递归公用表表达式(CTE),我们可以先把树形结构展开,再结合GROUP BY完成分组后的树形统计。

MySQL中如何实现分组后的树形结构统计?结合递归CTE轻松搞定

一、示例表结构

假设有一张分类表,自身通过parent_id关联形成树:

CREATE TABLE category (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  parent_id INT
);

INSERT INTO category VALUES
(1, '数码', 0),
(2, '手机', 1),
(3, '电脑', 1),
(4, '安卓手机', 2),
(5, 'iOS手机', 2),
(6, '笔记本', 3);

二、使用递归CTE展开树形路径

递归CTE包含锚点查询和递归查询两部分,可生成每个节点到根的路径:

WITH RECURSIVE cte_tree AS (
  SELECT id, name, parent_id, CAST(name AS CHAR(255)) AS path
  FROM category
  WHERE parent_id = 0
  UNION ALL
  SELECT c.id, c.name, c.parent_id, CONCAT(t.path, ' > ', c.name)
  FROM category c
  INNER JOIN cte_tree t ON c.parent_id = t.id
)
SELECT * FROM cte_tree;

三、分组后的树形统计

如果另有一张商品表关联分类,可统计每个分类下的商品数,并保留树形层级:

CREATE TABLE product (
  id INT PRIMARY KEY,
  category_id INT,
  title VARCHAR(50)
);

INSERT INTO product VALUES
(1,4,'安卓机A'),(2,4,'安卓机B'),(3,5,'iPhone'),
(4,6,'轻薄本'),(5,6,'游戏本');

WITH RECURSIVE cte_tree AS (
  SELECT id, name, parent_id, CAST(name AS CHAR(255)) AS path
  FROM category
  WHERE parent_id = 0
  UNION ALL
  SELECT c.id, c.name, c.parent_id, CONCAT(t.path, ' > ', c.name)
  FROM category c
  INNER JOIN cte_tree t ON c.parent_id = t.id
)
SELECT t.path, COUNT(p.id) AS product_count
FROM cte_tree t
LEFT JOIN product p ON p.category_id = t.id
GROUP BY t.id, t.path
ORDER BY t.path;

四、结果说明

上述查询会输出类似下面的分层汇总:

pathproduct_count
数码0
数码 > 手机0
数码 > 手机 > 安卓手机2
数码 > 手机 > iOS手机1
数码 > 电脑 > 笔记本2

通过递归CTE先把层级铺开,再用LEFT JOIN和GROUP BY就能实现分组后的树形结构统计,不必在应用代码里递归求和。

注意:MySQL 8.0及以上版本才支持WITH RECURSIVE语法,老版本需用存储过程模拟。

实际业务中,你还可以在递归部分增加层级深度字段,方便前端控制缩进或做权限过滤。

MySQL递归CTE树形结构统计修改时间:2026-07-28 18:48:21

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。