MYSQL中group by做分组查询并排序

那么如何解决使分组后的数据按照主键的 desc 排序输出呢?

答案有两种方法:

1、使用子查询先把表进行排序,然后对字表进行 group by 查询,此时得到的列将是子查询的得到的一条记录的列。
2、使用 max 函数对可计算最大值的列进行对比查询,这种方法将只能使的对比列按照 desc 输出,不影响其他列。

以上两种方法的结果不同,使用的时候要按需来使用。

附例子:

表 tab1 有 3 列:主键id、名称name、登录时间time
id name time
1 a01 1
2 www.111cn.net 2
3 a03 3
4 a02 4
5 a01 5
6 a04 6

需求:

1、要求查询出各用户的登陆次数和最后登陆时间

解决办法:

第一种方法
select sub.name,count(sub.id) as login_nums,sub.time as last_time
from (select * from tab1 order by time) sub
group by sub.name
注意:此时查询得到的每一个列都属于原表的同一行记录,如指定查询 id,则 id 也是最新时间那行记录的id 111cn.net

第二种方法

select name,count(id) as login_nums,max(time) as last_time
from tab1
group by name
注意此时查询得到的每个列已经不再属于原表的同一行记录了。

时间: 2024-09-15 07:41:16

MYSQL中group by做分组查询并排序的相关文章

mysql中group by留下的数据是哪一条

问题描述 mysql中group by留下的数据是哪一条 group by分组后,会留下一条数据,请问留下的这条数据,我们可以指定吗?就是指定显示出来的那条数据是某组中的指定的某条数据. 解决方案 你可以group生成到i一个表中,然后你再select where加条件把你需要的查询出来 解决方案二: 你可以在group by 后面用having的,having是专门用来处理分组后的数据的,包括就显示一条数据 解决方案三: 留下的数据是它默认排序的第一条. 如果要这么做那可以把group by的

mysql中group by与having合用注意事项分享_Mysql

group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数,但是今天帮同事调试一个mysql中的group by函数,让我大跌眼镜,当时感觉不可思议,然后回来做了个简化版试验,试验过程如下: mysql表结构 复制代码 代码如下: mysql> desc t;+---+----–+--+-–+---+---+| Field | Type | Null | Key | Default | Extra |+---+----–+-

mysql中group by用法与having合用注意事项

group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数,但是今天帮同事调试一个mysql中的group by函数,让我大跌眼镜,当时感觉不可思议,然后回来做了个简化版试验,试验过程如下: mysql表结构  代码如下 复制代码 mysql> desc t; +---+----–+--+-–+---+---+ | Field | Type | Null | Key | Default | Extra | +---+----

mysql中Group By 如何统计

问题描述 mysql中Group By 如何统计 数据如下: 访问时间 离开时间 2014-1-1 2014-1-2 2014-1-3 2014-2-1 2014-2-2 2014-2-8 2014-2-8 2014-3-1 2014-3-5 2014-3-5 2014-3-5 2014-4-1 2014-4-1 2014-4-10 2014-4-2 请问如何用sql计算分组显示,2-3月区间的数据 时间 ---- 访问次数 ---离开次数 2013-2 ----- 3 ----- 1 2013

浅谈mysql中多表不关联查询的实现方法_Mysql

大家在使用MySQL查询时正常是直接一个表的查询,要不然也就是多表的关联查询,使用到了左联结(left join).右联结(right join).内联结(inner join).外联结(outer join).这种都是两个表之间有一定关联,也就是我们常常说的有一个外键对应关系,可以使用到 a.id = b.aId这种语句去写的关系了.这种是大家常常使用的,可是有时候我们会需要去同时查询两个或者是多个表的时候,这些表又是没有互相关联的,比如要查user表和user_history表中的某一些数据

MySQL中select语句使用order按行排序_Mysql

本文介绍MySQL数据库中执行select查询语句,并对查询的结果使用order by 子句进行排序. 再来回顾一下SQL语句中的select语句的语法: Select 语句的基本语法: Select <列的集合> from <表名> where <条件> order by <排序字段和方式> 如果要对查询结果按某个字段排序,则要使用order by 子句,如下: select * from <表名> order by <字段名称>

MYSQL中GROUP分组去除重复数据

GROUP分组去除重复数据 /**  * 清除同一专题中重复导入的数据  * @author tanteng  * @date 2014.07.27  */ public function fuck_repeat(){  set_time_limit(0);  $sql = "SELECT `id` FROM `v95_special_content` GROUP BY `specialid`,`curl` HAVING COUNT(`curl`)>1 ";  $result =

MySQL中GROUP BY的基本实现原理

  由于 GROUP BY 实际上也同样会进行排序操作,而且与 ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作.当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算.所以,在GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引. 在 MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的场景下使用.下面我们分别针对这三种实现方

mysql中GROUP BY 和ORDER BY 组合使用注意事项

例子 ID  uid  content  weid      addtime  1  2  3213123  12  -..      2  3  3213123  12  -.  3  2  321312  12  -  3  1  xxx  12  3232  我们的需求是从消息表中掉出来最近的用户,刚开始的时候用的是这样写的  代码如下 复制代码 SELECT f . * FROM  `enet_wechat_message` AS m LEFT JOIN  `enet_wechatfan