MySQL group by和order by如何一起使用

 更新时间:2020年10月28日 11:20:44   投稿:yaominghui  
这篇文章主要介绍了MySQL group by和order by如何一起使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

假设有一个表:reward(奖励表),表结构如下:

CREATE TABLE test.reward (
 id int(11) NOT NULL AUTO_INCREMENT,
 uid int(11) NOT NULL COMMENT '用户uid',
 money decimal(10, 2) NOT NULL COMMENT '奖励金额',
 datatime datetime NOT NULL COMMENT '时间',
 PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 1
CHARACTER SET utf8
COLLATE utf8_general_ci
COMMENT = '奖励表';

表中数据如下:

现在需要查询每个人领取的最高奖励并且从大到小排序:

如果直接查询:

SELECT id, uid, money, datatime FROM reward GROUP BY uid ORDER BY money DESC;

得到如下结果:

没有得到我们需要的结果,这是因为group by 和 order by 一起使用时,会先使用group by 分组,并取出分组后的第一条数据,所以后面的order by 排序时根据取出来的第一条数据来排序的,但是第一条数据不一定是分组里面的最大数据。

方法一:

既然这样我们可以先排序,在分组,使用子查询。

SELECT
 r.id,
 r.uid,
 r.money,
 r.datatime
FROM (SELECT
  id,
  uid,
  money,
  datatime
 FROM reward
 ORDER BY money DESC) r
GROUP BY r.uid
ORDER BY r.money DESC;

方法二:

如果不需要取得整条记录,则可以使用 max() min()

SELECT id, uid, money, datatime, MAX(money) FROM reward GROUP BY uid ORDER BY MAX(money) DESC;

得到结果:

可能你已经发现了,使用max()取得的记录,money字段和max(money)字段不一致,这是因为这里只是取出了该uid的最大值,但是该最大值对应的整条记录没有取出来。

如果需要取得整条记录,则不能使用这种方法,可以使用子查询。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 查看当前mysql使用频繁的sql语句(详解)

    查看当前mysql使用频繁的sql语句(详解)

    下面小编就为大家带来一篇查看当前mysql使用频繁的sql语句(详解)。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL 配置文件my.cnf 例子最详细翻译

    MySQL 配置文件my.cnf 例子最详细翻译

    MySQL 配置文件my.cnf 例子最详细翻译,需要的朋友可以看看。
    2009-05-05
  • mysql could not be resolved: Name or service not known

    mysql could not be resolved: Name or service not known

    今天查看mysql日志的时候发现[Warning] IP address '10.0.0.220' could not be resolved: Name or service not known,原来是mysql DNS反解:skip-name-resolve的原因,屏蔽一下就可以了
    2015-08-08
  • CentOS7下安装MySQL5.7.39的详细过程

    CentOS7下安装MySQL5.7.39的详细过程

    这篇文章主要介绍了CentOS7下安装MySQL5.7.39的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • Mysql存储过程如何实现历史数据迁移

    Mysql存储过程如何实现历史数据迁移

    这篇文章主要介绍了Mysql存储过程如何实现历史数据迁移,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • mysql触发器之创建使用触发器简单示例

    mysql触发器之创建使用触发器简单示例

    这篇文章主要介绍了mysql触发器之创建使用触发器,结合实例形式分析了mysql创建、查看、调用触发器的相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • Mysql中如何查看执行计划

    Mysql中如何查看执行计划

    这篇文章主要介绍了Mysql中如何查看执行计划,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • MySQL 回表,覆盖索引,索引下推

    MySQL 回表,覆盖索引,索引下推

    这篇文章主要介绍了MySQL 回表,覆盖索引,索引下推,就是我们需要查询的数据都在二级索引树中,直接返回这种情况就叫做覆盖索引
    2022-07-07
  • mysql中GROUP_CONCAT函数使用及遇到问题详解

    mysql中GROUP_CONCAT函数使用及遇到问题详解

    这篇文章主要给大家介绍了关于mysql中GROUP_CONCAT函数使用及遇到问题的相关资料,GROUP_CONCAT是用于将分组后的多个行连接为一个字符串的聚合函数,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • IDEA 链接Mysql数据库并执行查询操作的完整代码

    IDEA 链接Mysql数据库并执行查询操作的完整代码

    这篇文章主要介绍了IDEA 链接Mysql数据库并执行查询操作的完整代码,代码不难,详细大家看完本文肯定有意向不到的收获,感兴趣的朋友跟随小编一起看看吧
    2021-05-05

最新评论