如果直接查询表是没问题,但是业务需求是按汇总后的amount排序,所以有一个from子查询,请问有没有什么方法汇总后求topN select id,province,amount,rn from( select id,province,amount, row_number() over(partition by province order by amount desc ) as rn from ( select id,province,sum(amount) amount from mytable group by id,province )m )a where rn<=5 ; 返回结果: 1> (true,id001,浙江,1505.66,1) 2> (true,id001,其他,3384.91,1) 7> (true,id001,北京,365.87,1) 3> (true,id001,天津,310.38,1) 7> (false,id001,北京,365.87,1) 7> (true,id001,北京,676.25,1) 7> (false,id001,北京,676.25,1) 7> (true,id001,北京,978.14,1) 7> (true,id001,广东,329.25,1) 7> (false,id001,广东,329.25,1) 如果直接查询表是没问题: select id,province,amount,rn from( select id,province,amount, row_number() over(partition by province order by amount desc ) as rn from mytable )a where rn<=5 ; 7> (true,id001,北京,310.38,2) 6> (true,id001,湖北,344.34,1) 8> (true,id001,山东,348.11,1) 3> (true,id001,四川,7283.02,2) 7> (true,id001,北京,301.89,3) 3> (false,id001,四川,1128.3,2) 8> (true,id001,重庆,310.38,3) 3> (true,id001,四川,1128.3,3) 6> (true,id001,上海,647.55,1) 3> (false,id001,四川,310.38,3) 6> (false,id001,上海,310.38,1) 7> (true,id001,广东,329.25,1) 3> (true,id001,四川,310.38,4) 8> (true,id001,重庆,1618.87,1) 6> (true,id001,上海,310.38,2)*来自志愿者整理的flink邮件归档
Hi,你使用的是 flink 1.9 blink planner 吧? 首先你的 topn query 没有问题。结果也没有问题。 因为你是根据 province 分组求 top5,也就是每个省份排名前5的 id。但是现在你的数据中,每个省份只有一个 id,所以大家的排名都是1。 如果你想求全局前5名的省份,那么row_number 那里不需要定义 partition by province。*来自志愿者整理的flink邮件归档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。