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

吾爱主题 阅读:189 2024-04-01 23:50:46 评论:0

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

?
1 2 3 4 5 6 7 8 9 10 11 12 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 排序时根据取出来的第一条数据来排序的,但是第一条数据不一定是分组里面的最大数据。

方法一:

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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 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的最大值,但是该最大值对应的整条记录没有取出来。

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

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

原文链接:https://www.jianshu.com/p/c3db3151c861

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容