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

问题解决。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值