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
相关产品推荐
相关产品推荐

