MySQL中groupby与orderby⼀起使⽤排序问题
MySQL中group by 与 order by ⼀起使⽤排序问题
假设有⼀个表:reward(奖励表),表结构如下:
CREATE ward (
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 排序时根据取出来的第⼀条数据来排序的,但是第⼀条数据不⼀定是分组⾥⾯的最⼤数据。
groupby分组⽅法⼀:
既然这样我们可以先排序,在分组,使⽤⼦查询。
SELECT
r.id,
r.uid,
<,
r.datatime
FROM (SELECT
id,
uid,
money,
datatime
FROM reward
ORDER BY money DESC) r
GROUP BY r.uid
ORDER DESC;
得到正确结果:
⽅法⼆:
如果不需要取得整条记录,则可以使⽤ max()
SELECT id, uid, money, datatime, MAX(money) FROM reward GROUP BY uid ORDER BY MAX(money) DESC;
得到结果:
可能你已经发现了,使⽤max()取得的记录,money字段和max(money)字段不⼀致,这是因为这⾥只是取出了该uid的最⼤值,但是该最⼤值对应的整条记录没有取出来。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。