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

跨多字段聚合数据:统计每行segment列最高频值生成FREQUENT列

假设你的表名为segment_data,以下是不同数据库环境下实现该需求的可行方案:

  • 通用思路(兼容大多数支持窗口函数的数据库)
    核心逻辑是先把每行的四个segment字段拆分为行级数据,按id和字段值分组统计频次后取最高值关联回原表,代码示例如下:
    SELECT 
        t.id,
        t.segment1,
        t.segment2,
        t.segment3,
        t.segment4,
        s.val AS FREQUENT
    FROM segment_data t
    LEFT JOIN (
        SELECT 
            id,
            val,
            ROW_NUMBER() OVER(PARTITION BY id ORDER BY COUNT(*) DESC) AS rn
        FROM (
            SELECT id, segment1 AS val FROM segment_data
            UNION ALL
            SELECT id, segment2 AS val FROM segment_data
            UNION ALL
            SELECT id, segment3 AS val FROM segment_data
            UNION ALL
            SELECT id, segment4 AS val FROM segment_data
        ) tmp
        GROUP BY id, val
    ) s ON t.id = s.id AND s.rn = 1;
    
  • PostgreSQL简化写法
    可以直接用数组+行转列函数逐行计算,代码更简洁性能更高:
    SELECT 
        *,
        (
            SELECT val 
            FROM UNNEST(ARRAY[segment1, segment2, segment3, segment4]) val
            GROUP BY val
            ORDER BY COUNT(*) DESC
            LIMIT 1
        ) AS FREQUENT
    FROM segment_data;
    

注意:如果某行存在多个值出现次数相同的最高频次,上述默认取排序靠前的第一个。如需返回所有并列最高值,可将查询中的LIMIT 1或者ROW_NUMBER()替换为RANK()等对应支持返回多条的逻辑即可。

内容的提问来源于stack exchange,提问作者Prabhakar Kumar Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:06:02