mysql group by 先排序与分组同时使用方法

本教程今天要讲述一下关于,困扰使用mysql教程数据库教程的朋友的一个常见的问题,mysql group by 先排序与分组同时使用方法,下面看实例。

看排序

select * from (select * from posts order by dateline desc) group by  tid order by dateline desc limit 10


这样效率应该高点。取消了order   by   的filesort过程。

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     200807     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     200805     4     bbb4
6     c     200807     5     ccc6
都按我们的要求显示了结果


转载于:https://my.oschina.net/u/2358326/blog/602049

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值