MySQL分组排序求Top

这篇文章主要介绍了详解MySQL分组排序求Top
表结构:
CREATE TABLE `score` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `grp` int(11) DEFAULT NULL,
  `num` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;


1.在where中可以通过子查询创造一个新的变量来过滤
SELECT * FROM score AS t3  
WHERE (  
  SELECT COUNT(*) FROM score AS t1  
  LEFT JOIN score AS t2  
  ON t1.grp = t2.grp AND t1.num < t2.num  
  WHERE t1.id = t3.id 
) < 3 
ORDER BY t3.grp ASC, num DESC

2:如果希望将序号也带上
SELECT *, (SELECT count(1)+1 from score tb WHERE ta.grp=tb.grp and ta.num<tb.num) as row_num from score ta order by ta.grp,num desc 

3.mysql8以后可以通过窗口函数实现
SELECT * ,row_number() over (partition by grp order by num desc ) as row_num from score 

来源:
https://www.jb51.net/article/117859.htm

https://www.toutiao.com/i6613173233380229636/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值