mysql group by 先排序與分組同時使用方法

本教程今天要講述一下關於,困擾使用mysql教程數據庫教程的朋友的一個常見的問題,mysql group by 先排序與分組同時使用方法,下面看實例。php

看排序html

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


這樣效率應該高點。取消了order   by   的filesort過程。sql

select   *   from   t   where     logtime     in   (select   max(logtime   )   from   t   group   by   username)


 

也有網友利用自鏈接實現的 ,這樣的效率應該比上面的子查詢效率高,不過,爲了簡單明瞭,就只用這樣一種了,group by沒有排序功能,多是mysql弱智的地方,也許是我尚未發現數據庫


--
-- 表的結構 `test`
--post

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;spa

--
-- 導出表中的數據 `test`
--.net

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');orm

查詢
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
都按咱們的要求顯示告終果htm

相關文章
相關標籤/搜索