深度分析mysql GROUP BY 与 ORDER BY

 更新时间:2014年06月08日 11:01:59   作者:  
鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用ContentProvider时可以使用子查询),主要方法是用SQLiteDatabase 的 rawQuery,直接运行sql语句就可以了。

本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表

 

我现在需要取出每个分类中最新的内容

select * from test group by category_id order by `date`

结果如下

 

明显。这不是我想要的数据,原因是msyql已经的执行顺序是

引用

写的顺序:select ... from... where.... group by... having... order by..
执行顺序:from... where...group by... having.... select ... order by...

所以在order by拿到的结果里已经是分组的完的最后结果。
由from到where的结果如下的内容。

 

到group by时就得到了根据category_id分出来的多个小组

 
 

到了select的时候,只从上面的每个组里取第一条信息结果会如下

 

即使order by也只是从上面的结果里进行排序。并不是每个分类的最新信息。
回到我的目的上 --分类中最新的信息
根据上面的分析,group by到select时只取到分组里的第一条信息。有两个解决方法

1,where+group by(对小组进行排序)
2,从form返回的数据下手脚(即用子查询)
由where+group by的解决方法
对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但group_concat的作用是将小组里的字段里的值进行串联起来。

select group_concat(id order by `date` desc) from `test` group by category_id

 

再改进一下

select * from `test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc

 

子查询解决方案

select * from (select * from `test` order by `date` desc) `temp`  group by category_id order by `date` desc

自己例子

复制代码 代码如下:

SELECT * FROM (SELECT * FROM `ecm_copy_goods_change` ORDER BY `cid` DESC) `ecm_copy_goods_change` GROUP BY goods_id ORDER BY `cid` DESC

相关文章

  • MySQL5.1忘记root密码的解决办法(亲测)

    MySQL5.1忘记root密码的解决办法(亲测)

    这篇文章主要介绍了MySQL5.1忘记root密码的解决办法(亲测)的相关资料,需要的朋友可以参考下
    2016-01-01
  • MySQL学习之基础操作总结

    MySQL学习之基础操作总结

    MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的。本文将为大家详细介绍一下MySQL的基础操作,需要的可以参考一下
    2022-03-03
  • Winserver2012下mysql 5.7解压版(zip)配置安装教程详解

    Winserver2012下mysql 5.7解压版(zip)配置安装教程详解

    这篇文章主要介绍了Winserver2012下mysql 5.7解压版(zip)配置安装教程详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • mysql 5.5 开启慢日志slow log的方法(log_slow_queries)

    mysql 5.5 开启慢日志slow log的方法(log_slow_queries)

    MySQL中提供了一个慢查询的日志记录功能,可以把查询SQL语句时间大于多少秒的语句写入慢查询日志,日常维护中可以通过慢查询日志的记录信息快速准确地判断问题所在
    2016-05-05
  • Ubuntu 18.04安装mysql 5.7.23

    Ubuntu 18.04安装mysql 5.7.23

    这篇文章主要为大家详细介绍了Ubuntu 18.04安装mysql 5.7.23的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • MySQL入门(三) 数据库表的查询操作【重要】

    MySQL入门(三) 数据库表的查询操作【重要】

    本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对于INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)等一些复杂查询。 通过本节的学习,可以让你知道这些基本的复杂查询是怎么实现的,,需要的朋友可以参考下
    2018-07-07
  • MySQL窗口函数OVER()用法及说明

    MySQL窗口函数OVER()用法及说明

    这篇文章主要介绍了MySQL窗口函数OVER()用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 面试官问订单ID是如何生成的?难道不是MySQL自增主键

    面试官问订单ID是如何生成的?难道不是MySQL自增主键

    最近在考虑订单id怎么生成,下面这篇文章主要给大家介绍了关于面试官问订单ID是如何生成的?难道不是MySQL自增主键的相关资料,需要的朋友可以参考下
    2023-02-02
  • mysql如何实现最大连接数

    mysql如何实现最大连接数

    云服务器同时最大连接数,也就是说可以有一千个用户,那么mysql如何实现最大连接数,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 一文带你理解MySql中explain结果filtered

    一文带你理解MySql中explain结果filtered

    使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,下面这篇文章主要给大家介绍了关于MySql中explain结果filtered的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论