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

SQLite自引用表递归计算节点及所有子节点score总和

实现方案

你可以通过以下两种方式实现需求:

方案一:利用现有full_slug字段(性能更优)

由于full_slug已经存储了完整路径,只要后代节点的full_slug是当前节点的路径或子路径,就属于当前节点的后代,直接关联统计即可:

SELECT
    e1.slug,
    SUM(e2.score) AS total_score
FROM ecosystems e1
INNER JOIN ecosystems e2
    ON e2.full_slug = e1.full_slug 
    OR e2.full_slug LIKE CONCAT(e1.full_slug, '/%')
GROUP BY e1.slug
ORDER BY e1.slug;

注:匹配条件增加/前缀校验,是为了避免出现slug为aaa和aaaa这类前缀相似的场景下误匹配,保证匹配的都是路径上的后代节点。

方案二:通用递归CTE实现(无full_slug也可使用)

如果没有冗余的full_slug字段,可以用递归CTE遍历每个节点的所有后代节点,再聚合计算:

WITH RECURSIVE eco_hierarchy AS (
    -- 锚点:将每个节点作为根节点,初始化自身得分
    SELECT 
        slug AS root_slug,
        slug,
        parent_slug,
        score
    FROM ecosystems
    UNION ALL
    -- 递归:逐层关联子节点,挂载到对应的根节点下
    SELECT 
        eh.root_slug,
        e.slug,
        e.parent_slug,
        e.score
    FROM eco_hierarchy eh
    INNER JOIN ecosystems e ON e.parent_slug = eh.slug
)
-- 按根节点分组求和,得到每个节点及其所有后代的总得分
SELECT 
    root_slug AS slug,
    SUM(score) AS total_score
FROM eco_hierarchy
GROUP BY root_slug
ORDER BY root_slug;

两种方案执行结果都和你给出的预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:01