1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql group by order_(Mysql5.7踩坑)Mysql关于同时使用Group by 和Order by问题

mysql group by order_(Mysql5.7踩坑)Mysql关于同时使用Group by 和Order by问题

时间:2022-03-11 00:18:36

相关推荐

mysql group by order_(Mysql5.7踩坑)Mysql关于同时使用Group by 和Order by问题

在工作中,有个业务逻辑【类似】需要获取每个用户最高的奖励金额,一开始想到的是先使用group by 对用户进行分组,再order by 按照时间降序排列。(表结构和数据如下)SETNAMESutf8mb4;

SETFOREIGN_KEY_CHECKS=0;

------------------------------

--Tablestructureforreward

------------------------------

DROPTABLEIFEXISTS`reward`;

CREATETABLE`reward`(

`id`int(11)NOTNULLAUTO_INCREMENT,

`uid`int(11)NOTNULLCOMMENT'用户uid',

`money`decimal(10,2)NOTNULLCOMMENT'奖励金额',

`datatime`datetime(0)NOTNULLCOMMENT'时间',

PRIMARYKEY(`id`)USINGBTREE

)ENGINE=InnoDBAUTO_INCREMENT=10CHARACTERSET=utf8COLLATE=utf8_general_ciCOMMENT='奖励表'ROW_FORMAT=Dynamic;

------------------------------

--Recordsofreward

------------------------------

INSERTINTO`reward`VALUES(1,111,300.00,'-12-1710:25:27');

INSERTINTO`reward`VALUES(2,222,100.00,'-12-1710:11:46');

INSERTINTO`reward`VALUES(3,222,600.00,'-12-1710:12:15');

INSERTINTO`reward`VALUES(4,333,500.00,'-12-1710:12:31');

INSERTINTO`reward`VALUES(5,111,500.00,'-12-1710:12:45');

INSERTINTO`reward`VALUES(6,333,200.00,'-12-1710:12:57');

INSERTINTO`reward`VALUES(7,333,700.00,'-12-1710:13:07');

INSERTINTO`reward`VALUES(8,222,400.00,'-12-1710:13:18');

INSERTINTO`reward`VALUES(9,111,350.00,'-12-1710:13:29');

SETFOREIGN_KEY_CHECKS=1;

(第一次尝试)于是执行sql语句:SELECT*FROMrewardGROUPBYuidORDERBYmoneydesc

第二次尝试(既然这样我们可以先排序,在分组,使用子查询。)SELECT*FROM(SELECT*FROMrewardORDERBYmoneydesc)rGROUPBYr.uid

发现得到的结果还是不是我想要的(查了许多资料 网上大神都是说通过子查询解决这个问题,有点打破我的认知了)

继续查找问题,发现我的mysql 版本是5.7,看到有条帖子“mysql 5.7 中order by 和GROUP BY 一起使用 order by 不生效”,必须加上limit限制 ,避免系统会把order by优化掉。

(第三次尝试)最终sql语句:SELECT*FROM(SELECT*FROMrewardORDERBYmoneydesclimit10000000000000)rGROUPBYr.uid

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。