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

Hive技术咨询:如何获取表中出现频次最高的字段值

获取Hive表中分组内出现频次最高的值

要实现按col1分组,找出每个分组里col2出现次数最多的记录,你可以通过两次聚合+窗口函数来完成,下面是具体的实现步骤和代码:

步骤1:统计每个分组内各值的出现次数

首先我们需要计算col1每个分组下,col2不同值的出现频次:

SELECT 
    col1,
    col2,
    COUNT(*) AS cnt
FROM your_table_name
GROUP BY col1, col2

这段SQL会得到每个(col1, col2)组合的计数结果,用你的示例数据会输出:

col1 col2       cnt
a    a_value1   2
a    a_value2   1
a    c_value3   1
b    b_value1   1

步骤2:用窗口函数筛选每个分组内频次最高的记录

接下来我们用ROW_NUMBER()窗口函数,按col1分组,然后按cnt降序排序,这样每个分组里频次最高的记录会排在第一位,最后筛选出排序为1的记录即可:

SELECT col1, col2
FROM (
    SELECT 
        col1,
        col2,
        ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY cnt DESC) AS rn
    FROM (
        SELECT 
            col1,
            col2,
            COUNT(*) AS cnt
        FROM your_table_name
        GROUP BY col1, col2
    ) t1
) t2
WHERE rn = 1

额外说明

  • 如果某个分组内有多个col2值出现次数相同且都是最高(比如col1=a里有两个值都出现2次),上面的ROW_NUMBER()会随机选一个。如果你想把所有并列最高的都保留,可以把ROW_NUMBER()换成RANK()或者DENSE_RANK()。
  • 记得把SQL里的your_table_name替换成你实际的表名。

用你的示例数据测试这段SQL,就能得到预期的输出:

col1 col2
a    a_value1
b    b_value1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:22:57