mysql分组和连接同时使用方法_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

都按我们的要求显示了结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值