Mysql取分组后前N个值

表结构如下:
create table `test_group_limit` (
	`row_id` varchar (33),
	`id` int (11),
	`num` bigint (11),
	`log` varchar (33)
); 
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('1','1','32','e');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('2','1','21','r');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('3','1','54','f');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('4','1','31','d');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('5','1','54','g');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('6','2','32','v');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('7','2','12','b');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('8','2','21','x');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('9','2','76','n');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('10','2','45','z');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('11','2','89','a');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('12','3','32','m');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('13','3','12','k');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('14','3','76','p');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('15','3','45','i');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('16','3','90','l');
insert into `test_group_limit` (`row_id`, `id`, `num`, `log`) values('17','3','65','q');

取按id分组后每组的最大值:
SELECT t1.`id`,t1.`num` FROM `test_group_limit` t1
WHERE NOT EXISTS(SELECT 1 FROM  test_group_limit WHERE t1.`id`=id AND num>t1.`num`);

上面表示,通过id自关联,每组中,没有其他数能大于它的就是最大数,不能大于等于,因为两组肯定至少存在等于的情况,就查不出来数据。

取按id分组后每组的前三的值
这种方法存在问题,当存在相同值时,前三取出来的数据不一定就是只有三行
SELECT t1.`id`,t1.`num` FROM `test_group_limit` t1
WHERE 3>(SELECT COUNT(1) FROM  test_group_limit WHERE t1.`id`=id AND num>t1.`num`)
order by t1.id asc,t1.num desc


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值