【超实用】关于mysql分组排序的一些用法。。。。欢迎批评指教
今天逛论坛,进错了板块,跑到DB2的板块去了,突然看到一个帖子提问,大概是9月份的老帖了。就很感兴趣的想用mysql试试,本以为直接group by min,max就解决了,但是显然是低估了题主的疑惑。
链接:http://bbs.csdn.net/topics/392025981
帖子内容:
(数据字段只有四个)

于是乎,计划用mysql的变量加分组排序的变形来解决问题:
建个测试表:
插入数据:
第一直觉:
结果:

与题主想要的结果不符
二次思考:
结果:

成功了,感叹mysql的变量真的很好用!!
链接:http://bbs.csdn.net/topics/392025981
帖子内容:
(数据字段只有四个)

于是乎,计划用mysql的变量加分组排序的变形来解决问题:
建个测试表:
create table m
(
`de` varchar(10),
`ar` varchar(10),
`detime` DATE,
`artime` date
)
engine = InnoDB auto_increment = 1 DEFAULT charset = utf8mb4插入数据:
INSERT INTO m VALUES('北京','广州','20160901','20160902'),
('北京','广州','20160903','20160906'),
('北京','广州','20160907','20160908'),
('北京','上海','20160909','20160910'),
('北京','深圳','20160911','20160915'),
('北京','深圳','20160917','20160920'),
('北京','广州','20160922','20160924'),
('北京','广州','20160925','20160926')第一直觉:
SELECT de,
ar,
min(detime),
max(artime)
from m
GROUP BY 1,2结果:

与题主想要的结果不符
二次思考:
SELECT result.number,
result.de,
result.ar,
min(result.detime),
max(result.artime)
FROM
(
select b.de,b.ar,b.detime,b.artime,
if(b.de=@x and b.ar = @y,@num:=@num,@num:=@num+1) as number,
@x:=b.de,
@y:=b.ar
from (select de,ar,detime,artime from m order by detime,artime ) b ,
(select @x := null , @y := NULL, @num:=0) c
)result
GROUP BY 1,2,3结果:

成功了,感叹mysql的变量真的很好用!!
...全文
相关推荐
Mysql利用group by分组排序
总之,Mysql的`GROUP BY`分组排序功能为我们提供了一种有效的方式来处理复杂的数据排序和选择问题,尤其是在需要找到每个分组的“最值”时。
MySQL之聚合查询、分组和排序
### MySQL之聚合查询、分组和排序#### 聚合查询、分组与排序概述聚合查询、分组和排序是关系型数据库系统中重要的数据处理方式之一,尤其是在MySQL这样的流行数据库管理系统中更是如此。
MySQL分组排序功能
通过巧妙地利用MySQL的用户自定义变量,我们可以实现对数据的分组排序。这种方法虽然不如Oracle中的窗口函数那样直观,但仍然是非常实用且高效的解决方案。
详解MySQL分组排序求Top N
首先,我们要明白分组(GROUP BY)和排序(ORDER BY)在SQL中的基本用法。分组用于将数据根据一个或多个列进行聚合,例如计算每个部门的员工平均工资。
Mysql取分组后的每组第一条数据
解决这个问题的一种方法是通过创建一个已排序的临时表,然后再进行分组操作。这个临时表可以是通过子查询或者自连接来构建的,确保数据按所需的顺序排列。


