mariadb踩过的坑之排序分组

      最近公司考虑上MariaDB数据库,本人正一直在考虑切换MariaDB的前期准备, 刚好同事发过来一堆Excel数据,要做个统计报表,好吧, 那就先练练手吧, 将数据导入MariaDB跑一跑吧! 还真踩坑里了!,先哭一会先。

      废话少说, 直接上数据看吧,比较直观!

      报表要求很简单, 找出每个用户最新的一条充值记录。相信做过数据库报表的朋友们都知道如何写SQL,先从最新的MariaDB测试一下,


再看看一个人的充值数据记录,如下图,我们要找出最新的一条红色框内的记录,日期是最新的!

mariadb踩过的坑之排序分组_第1张图片

接下来我们来分组排序一下,直接上图:

mariadb踩过的坑之排序分组_第2张图片

发现了什么? OMG。。NND。。。我去年买了个表。。。蓝瘦香菇 ...

没爱了, 结果是同一条记录! 你没看错,真的是同一记录!!


好吧, 我们来再换一个版本再测试一下看结果!

mariadb踩过的坑之排序分组_第3张图片

各位观众,接下来是见证奇迹的一时刻。。。


我们不一样。。 歌是挺好听的!   然并卵....    还是同一个结果。。。


最后,我们回到MySQL数据库测试一下结果!MySQL版本我用5.6.39

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.39    |
+-----------+

1 row in set (0.00 sec) 




group by 后选择哪条记录

group by 是用于分组统计的,会按照分组字段进行排序,如果 order by 和 group by 同时出现,order by 是对 group by 的结果排序,因此取的是根据 group by 排序后各组第一条,但这是有逻辑错误的,好像只有在 MySQL 中可行。

我的理解是: 
select * from table order by <字段 2> 得到了一个有顺序的表 
然后 group by <字段 1> ,得到的时每个分组第一个,又因为之前已经排好序了,所以取的是<字段 2>升序排列的第一个。 

但是在实际操作中,如果有自增主键的话,一般取到了主键小的那一条数据

order by 只有后面跟着 limit 在子查询才有意义 

希望各位做数据库开发的朋友们,能分享更多的技术, 相互学习,共同提高!

喜欢或者感觉对你帮助就点个赞吧!!!!


你可能感兴趣的:(MariaDB学习,mariadb,踩坑,排序分组)