mysqlgroupby先排序与分组同时使⽤⽅法
本教程今天要讲述⼀下关于,困扰使⽤的朋友的⼀个常见的问题,mysql group by 先排序与分组同时使⽤⽅法,下⾯看实例。
看排序
* from (select * from posts order by dateline desc) group by  tid order by dateline desc limit 10
这样效率应该⾼点。取消了order  by  的filesort过程。
groupby分组select  *  from  t  where    logtime    in  (select  max(logtime  )  from  t  group  by  username)
也有⽹友利⽤⾃连接实现的,这样的效率应该⽐上⾯的⼦查询效率⾼,不过,为了简单明了,就只⽤这样⼀种了,group by没有排序功能,可能是mysql的地⽅,也许是我还没有发现
--
-- 表的结构 `test`
--
create table if not exists `test` (
`id` int(11) not null auto_increment,
`name` varchar(16) not null,
`month` int(11) not null,
`serial` int(11) not null,
`other` varchar(20) not null,
primary key (`id`)
) engine=myisam  default charset=utf8;
--
-- 导出表中的数据 `test`
--
insert into `test` (`id`, `name`, `month`, `serial`, `other`) values
(1, 'a', 200807, 2, 'aaa1'),
(2, 'a', 200805, 2, 'aaa2'),
(3, 'b', 200805, 3, 'bbb3'),
(4, 'b', 200805, 4, 'bbb4'),
(5, 'a', 200805, 1, 'aaa5'),
(6, 'c', 200807, 5, 'ccc6'),
(7, 'b', 200807, 8, 'bbb7'),
(8, 'c', 200807, 3, 'ccc8'),
(9, 'a', 200805, 6, 'aaa9');
查询
select * from (select * from test order by month desc,serial desc) t group by name 得到
id    name    month    serial    other
1    a    200807
2    aaa1
7    b    200807    8    bbb7
6    c    20080
7    5    ccc6
换⼀下排序⽅式
select * from (select * from test order by month asc,serial desc) t group by name 得到
id    name    month    serial    other
9    a    200805    6    aaa9
4    b    20080
5    4    bbb4
6    c    20080
7    5    ccc6
都按我们的要求显⽰了结果

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。