mysql DISTINCT top 5 去重

17 篇文章 0 订阅
如果表字段是:id, author_id, version, rank, ……
假设表数据如下

30,1,100,200……

29,2,100,190……

28,3,100,180……

27,4,100,170……

26,5,100,160……

25,6,100,150……

24,7,100,140……

23,1,100,130……

22,3,100,120……

需求:取最新排名的前五个author_id

正确的结果:1,2,3,4,5

首先想到的查询语句如下:
select distinct author_id from article order by version desc, rank desc limit 5;

大部分情况是正确的。但是对于上面的测试数据,mysql的输出结果为:2,4,5,6,7

很奇怪不知道结果为啥如此。

改查前10条

select distinct author_id from article order by version desc, rank desc limit 10;

mysql的输出结果为:2,4,5,6,7,1,3,……

根据结果分析,distinct与order by结合后的排序,author_id出现在了id最小的位置上了。

然后我尝试了以下语句,输出结果就是正确的。

select distinct author_id from ( select author_id from article order by rank desc ) tb limit 5

问题解决。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值