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

如何统计逗号分隔字段的字符出现次数并按计数降序排序

实现逻辑

整体分为三步完成:

  • 拆分每行COL_IN字段的逗号分隔值,得到单个独立元素
  • 解析每个元素的统计规则:带数字前缀的元素(如2K)提取数字作为计数、字母作为统计项;无数字前缀的元素(如E、O)默认计数为1
  • 按统计项分组求和,最终按总计数降序排序

主流数据库实现示例

以下代码请将你的表名替换为实际表名使用。

PostgreSQL 版本

WITH split_elements AS (
    -- 拆分逗号分隔字符串,去除元素前后空格
    SELECT TRIM(UNNEST(STRING_TO_ARRAY(col_in, ','))) AS elem
    FROM 你的表名
),
parsed_elements AS (
    SELECT
        -- 提取字母部分作为输出字段
        REGEXP_REPLACE(elem, '\d*', '') AS col_out,
        -- 提取数字部分,无数字默认计数为1
        COALESCE(NULLIF(REGEXP_REPLACE(elem, '\D*', ''), '')::INT, 1) AS cnt
    FROM split_elements
)
-- 分组聚合排序
SELECT col_out, SUM(cnt) AS COUNT
FROM parsed_elements
GROUP BY col_out
ORDER BY COUNT DESC;

MySQL 8.0+ 版本

WITH split_elements AS (
    -- 拆分逗号分隔字符串,去除元素前后空格
    SELECT TRIM(j.elem) AS elem
    FROM 你的表名 t
    JOIN JSON_TABLE(
        CONCAT('["', REPLACE(t.col_in, ',', '","'), '"]'),
        '$[*]' COLUMNS(elem VARCHAR(10) PATH '$')
    ) j
),
parsed_elements AS (
    SELECT
        -- 提取字母部分作为输出字段
        REGEXP_REPLACE(elem, '[0-9]', '') AS col_out,
        -- 提取数字部分,无数字默认计数为1
        IF(REGEXP_LIKE(elem, '^[0-9]'), CAST(REGEXP_REPLACE(elem, '[^0-9]', '') AS UNSIGNED), 1) AS cnt
    FROM split_elements
)
-- 分组聚合排序
SELECT col_out, SUM(cnt) AS `COUNT`
FROM parsed_elements
GROUP BY col_out
ORDER BY `COUNT` DESC;

如果使用不支持CTE和JSON_TABLE的低版本MySQL,可通过自定义拆分函数、存储过程实现相同逻辑,核心处理规则不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:30:04