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

Oracle中如何统计拆分后每个str字段值的出现次数?

实现字符串拆分后的值统计

嘿,要实现这个统计需求很简单,只需要把你现有的字符串拆分查询作为子查询,在外层加上分组统计逻辑就可以了。

你的原查询已经完成了把advantages1字段中的字符串拆分、清理(去掉引号和方括号)并得到单个str值的工作,现在只需要基于这些拆分后的结果,按str分组并计数:

SELECT str, COUNT(*) AS total
FROM (
    -- 保留你原来的拆分逻辑,优化了分层查询避免重复的问题
    SELECT trim(regexp_substr(str, '[^,]+', 1, level)) str 
    FROM (SELECT id, REGEXP_REPLACE(to_char(advantages1), '"|\[|\]', '') str FROM feedbacks) t 
    CONNECT BY instr(str, ',', 1, level - 1) > 0 
    AND PRIOR id = id
    AND PRIOR SYS_GUID() IS NOT NULL
) split_results
GROUP BY str
ORDER BY str;

补充说明:

  • 外层的GROUP BY str会把相同的str值归为一组,COUNT(*)就会统计每组的出现次数,别名设为total正好匹配你想要的列名。
  • 原查询的CONNECT BY逻辑可能会引发笛卡尔积导致重复结果,所以我加上了AND PRIOR id = id AND PRIOR SYS_GUID() IS NOT NULL,这是Oracle中处理分层查询避免重复行的常用技巧,能保证每个id下的字符串拆分结果不重复。如果你的原查询已经没有重复问题,也可以保留原本的写法。

执行这段SQL后,就能得到你示例里那种STR对应TOTAL的统计结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:12:46