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

