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

如何统计字符串链中id3下的唯一产品ID数量

统计隶属于指定父ID的唯一子产品ID简便方案

核心思路

无需拆分后反转数组,直接通过层级定位+筛选展开即可实现:只要id3出现在层级路径中,它之后的所有ID都是直接或间接隶属于它的。我们只需提取这些ID,去重后计数即可。

实现示例(以SQL场景为例)

方法1:轻量字符串匹配+拆分(适配多数SQL引擎)

直接定位id3在路径中的位置,提取其后的所有子串,拆分后去重计数:

SELECT COUNT(DISTINCT single_id) AS subordinate_count
FROM (
    -- 先筛选包含id3的行,提取id3之后的子路径
    SELECT SUBSTRING(col1 FROM POSITION('/id3/' IN col1) + 5) AS sub_path
    FROM your_table
    WHERE col1 LIKE '%/id3/%'
) t,
-- 将子路径拆分为单个ID
UNNEST(SPLIT(sub_path, '/')) AS single_id
WHERE single_id != ''; -- 排除空值

方法2:递归CTE(适用于支持递归的SQL,如MySQL 8+/PostgreSQL/Spark SQL)

适合需要更精细层级处理的场景,清晰追踪每个ID的层级关系:

WITH RECURSIVE hierarchy_nodes AS (
    -- 拆分每行路径为单个节点,记录节点在路径中的位置
    SELECT 
        col1,
        SPLIT_PART(col1, '/', seq) AS node_id,
        seq AS node_pos
    FROM your_table,
         GENERATE_SERIES(1, (SELECT MAX(ARRAY_LENGTH(SPLIT(col1, '/'))) FROM your_table)) AS seq
    WHERE seq <= ARRAY_LENGTH(SPLIT(col1, '/'))
),
id3_subordinates AS (
    -- 找到每个路径中id3的位置,筛选出位置在其之后的节点
    SELECT hn.node_id
    FROM hierarchy_nodes hn
    JOIN (
        SELECT col1, node_pos AS id3_pos
        FROM hierarchy_nodes
        WHERE node_id = 'id3'
    ) id3_positions ON hn.col1 = id3_positions.col1
    WHERE hn.node_pos > id3_positions.id3_pos
)
-- 去重计数
SELECT COUNT(DISTINCT node_id) AS subordinate_count
FROM id3_subordinates;

结果验证

针对示例数据执行后,将得到唯一ID集合[id4, id5, id6, id10, id14, id21, id34],计数为7,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:12:21