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
都按我们的要求显示了结果

时间: 2024-10-25 10:31:02

mysql group by 先排序与分组同时使用方法的相关文章

mysql查询如何先排序再分组呢?纠结了好几天了。

问题描述 mysql查询如何先排序再分组呢?纠结了好几天了. 比如数据表"article"中有一组这样的数据: id uid title... .... .....375 1 文章标题1376 1 文章标题2377 1 文章标题3378 2 asdfasdf379 3 fdaewqwe... .... ..... 然后我写了一句这样的sql:select * from article order by id desc执行后,结果如下: id uid title... .... ....

MySQL GROUP BY多个字段分组用法详解

mysql语句中group by 很容易理解 是分组查询. 比如 select sum(score) from user group by name 意思是查询每个人的分数总和 但是, select sum(score) from user group by item, sex 呢? 下面是测试结果. 测试数据如下: 查询结果如下: 根据结果分析 group by 多个字段的含义是,分别以每个字段的不同组合分组 本例 item=数学 sex=1 和 item=数学 sex=2 就会分到不同组中,

解决mysql group by不能排序方法

常用的方法  代码如下 复制代码 select * from table group by column_name order by id desc  是不能得到每个分组里面的id的最大的值的 解决方法: 有人写出下面的语句:  代码如下 复制代码 SELECT *,max(dateline) as max_line FROM posts GROUP BY  tid ORDER BY dateline DESC LIMIT 10 这条语句的没错是选出了最大发布时间,但是你可以对比一下 datel

Mysql group by 排序问题

 类如 有一个 帖子的回复表,posts( id , tid , subject , message ,  dateline ) , id 为 自动增长字段, tid为该回复的主题帖子的id(外键关联),  subject 为回复标题, message 为回复内容, dateline 为回复时间,用UNIX 时间戳表示, 现在要求 选出 前十个来自不同主题的最新回复 SELECT * FROM posts GROUP BY  tid  LIMIT 10 这样一个sql语句选出来的并非你想要的 最

mysql 数据库-关于mysql关联多列查询,分组查询并输出每组数据的中值

问题描述 关于mysql关联多列查询,分组查询并输出每组数据的中值 imei phone key value 863184021544828 lenovoa788t c14 484 355799050650579 samsungi9500 c14 542 355799050650579 samsungi9500 c14 623 868331013987821 huaweiu9508 c14 523 868331013987821 huaweiu9508 c14 498 8683310139878

用hql怎么实现先排序再分组

问题描述 用hql怎么实现先排序再分组 sql语句:select * from (select * from loginrecord order by l_time desc ) t group by u_id 用hql怎么来实现? 解决方案 http://www.educity.cn/wenda/204911.html

Mysql group by语句的优化分析

默认情况下,MySQL排序所有GROUP BY col1, col2, ....,查询的方法如同在查询中指定ORDER BY  col1, col2, ....如果显式包括一个包含相同的列的ORDER BY子句,MySQL可以毫不减速地对它进行优化,尽管仍然进行排序. 如果查询包括GROUP BY但你想要避免排序结果的消耗,你可以指定ORDER BY NULL禁止排序.例如:  代码如下 复制代码 INSERT INTO foo SELECT a, COUNT(*) FROM bar GROUP

Mysql group replication复制原理

前言:          Mysql版本5.7.17推出Mysql group replication(组复制),相对以前传统的复制模式(异步复制模式async replication 及半同步复制模式semi-sync replication),一个主,对应一个或多个从,在主数据库上执行的事务通过binlog复制的方式传送给slave,slave通过 IO thread线程接收将事务先写入relay log,然后重放事务,即在slave上重新执行一次事务,从而达到主从事务一致的效果,如下图为两

MYSQL每隔10分钟进行分组统计的实现方法_Mysql

前言 本文的内容主要是介绍了MYSQL每隔10分钟进行分组统计的实现方法,在画用户登录.操作情况在一天内的分布图时会非常有用,之前我只知道用「存储过程」实现的方法(虽然执行速度快,但真的是太不灵活了),后来学会了用高级点的「group by」方法来灵活实现类似功能. 正文: -- time_str '2016-11-20 04:31:11' -- date_str 20161120 select concat(left(date_format(time_str, '%y-%m-%d %h:%i'