HiveSQL如何获取按unemp降序排列的前3个不重复国家名称
解决方案
直接使用分组聚合取每个国家最高失业率后排序即可,正确查询语句如下:
SELECT country_name FROM ( SELECT country_name, MAX(unemp) AS max_unemp FROM tmpcalc GROUP BY country_name ORDER BY max_unemp DESC ) t LIMIT 3;
逻辑说明
- 内层查询通过
GROUP BY country_name对国家维度去重,同时用MAX(unemp)计算每个国家的最高失业率,确保每个国家仅对应一条记录,避免重复 - 内层直接按计算出的最高失业率降序排序,外层查询直接取前3条的国家名称,不会出现重复也不会打乱排序顺序
如果偏好使用窗口函数实现,也可以用以下写法,效果一致:
SELECT country_name FROM ( SELECT country_name, unemp, ROW_NUMBER() OVER (PARTITION BY country_name ORDER BY unemp DESC) AS rn FROM tmpcalc ) t WHERE rn = 1 ORDER BY unemp DESC LIMIT 3;
内容的提问来源于stack exchange,提问作者user2891462
相关产品推荐
相关产品推荐

