【超实用】关于mysql分组排序的一些用法。。。。欢迎批评指教

VertigozZ 2016-12-21 11:15:39
今天逛论坛,进错了板块,跑到DB2的板块去了,突然看到一个帖子提问,大概是9月份的老帖了。就很感兴趣的想用mysql试试,本以为直接group by min,max就解决了,但是显然是低估了题主的疑惑。

链接: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的变量真的很好用!!
...全文
330 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
VertigozZ 2016-12-22
  • 打赏
  • 举报
回复
引用 3 楼 fcy_n 的回复:
楼主肯定是没看到《MySQL技术内幕:SQL编程》,如果看过就知道里面有一小节说了连续范围问题,还有GROUP BY 1,2,3的对应的select顺序字段,属于简写,但不规范
恩呢 新手,谢谢啦 ,那我下一本书就要开始看《MySQL技术内幕:SQL编程》 这个了
VertigozZ 2016-12-21
  • 打赏
  • 举报
回复
引用 1 楼 wangjian0228 的回复:
GROUP BY 1,2,3 ------这个真的合理吗
我也是昨天才知道的,不知道合不合理,看着就是浮夸!!
致命的西瓜 2016-12-21
  • 打赏
  • 举报
回复
GROUP BY 1,2,3 ------这个真的合理吗
fcy_n 2016-12-21
  • 打赏
  • 举报
回复
楼主肯定是没看到《MySQL技术内幕:SQL编程》,如果看过就知道里面有一小节说了连续范围问题,还有GROUP BY 1,2,3的对应的select顺序字段,属于简写,但不规范

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧