前言
在使用group by和order by的时候,通常并不会出现什么问题,然而有一种情况会让人忽视。那就是对group组内数据进行order的时候。
通常大家在使用group by和order by的时候,潜意识里会觉得如果group分组里有多条记录,order by会对组内数据进行排序,然后group的数据会是order得到的第一条数据。实际上,order对于group的组内数据并不能进行排序!
eg:
CREATE TABLE `tb` (
`id` int(11) NOT NULL ,
`group_id` int(11) NOT NULL ,
`app_id` int(11) NOT NULL ,
`name` varchar(255) NOT NULL ,
PRIMARY KEY (`id`)
);
在表tb中存有不同分组的多个APPID信息,现在要求查询每个分组中最大的那一条APPID的记录
方案一:select * from tb group by group_id order by app_id desc;
结果:这种方案实际上获取的是物理块读取的第一条数据,并不一定是最大的APPID
方案二:select * from (select * from tb order by group_id DESC,appid DESC) as tmp group by group_id;
结果:如预期得到需求的数据。