表結構如下:
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
分組後取前N條
這種題目面試中經常出現,記錄一下 首先建表 create table students id int 11 not null auto increment comment 學號 clss id varchar 2 default null comment 班級id stu name varchar ...
MySQL 分組後取前幾條
利用group concat和substring index實現,能很好的利用索引,適合大資料。select from yourtable where id in select substring index group concat id order by column 2 desc 1 id f...
MySQL 分組後取最新值
1.需求 一張表中有多組資料,要求取出每組的最新一條的某些字段值。例如,成績表中儲存了學校所有學生 一年級 二年級 三年級 所有學科 語文 數學 英語 的成績,要求取出某個學生的最近一次所有學科的成績。2.實現 select 學科,select 成績from 成績表where 學科 a.學科 and...