我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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的最大值,但是该最大值对应的整条记录没有取出来。

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

假设有一个表:reward(奖励表),表结构如下:CREATE TABLE test.reward (id int(11) NOT NULL AUTO_INCREMENT,uid int(11) NOT NULL COMMENT '用户ui
2022-05-27

sql中group by和oder by怎么一起使用

使用 group by 和 order by 可以对分组数据进行排序:1. group by 分组数据;2. order by 对每组数据排序。SQL 中 GROUP BY 和 ORDER BY 的联合使用在 SQL 中,GROUP BY
sql中group by和oder by怎么一起使用
2024-05-02

mysql中order by和分组能一起使用么

是的,mysql 允许在分组查询中使用 order by 子句排序结果,步骤如下:分组数据(group by)聚合数据(使用聚合函数)排序结果(order by)MySQL 中 ORDER BY 与分组查询的结合使用是的,MySQL 允许
mysql中order by和分组能一起使用么
2024-05-09

Linq如何使用Group By

这篇文章主要介绍Linq如何使用Group By,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.计数var q = from p in db.Products group p by p.CategoryID i
2023-06-17

切记!MySQL中Order By与Limit不要一起用!

切记!MySQL 中 ORDER BY 与 LIMIT 不要一起用,有大坑......
MySQLOrderLimit2024-12-14

MySQL中的distinct与group by如何使用

这篇文章主要讲解了“MySQL中的distinct与group by如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的distinct与group by如何使用”吧!先说大
2023-07-05

切记!MySQL 中 ORDER BY 与 IMIT 不要一起用,有大坑

ORDER BY排序后,用LIMIT取前几条,发现返回的结果集的顺序与预期的不一样。

将 MySQL SUM() 函数与 GROUP BY 子句一起使用有什么好处?

当我们将 MySQL SUM() 函数与 GROUP BY 子句一起使用时,SUM() 函数会计算 GROUP BY 子句中指定的每个组的总和。将 SUM() 与 GROUP BY 子句一起使用的好处是我们可以轻松找到特定组的总计。要理解上
2023-10-22

MYSQL使用group by,如何查询出总记录数

比如有这样一条SQL,根据t.user_id,t.report_date两个字段统计这样前端页面能展示数据,但往往需要一个总记录数,在有分页的情况下用到一种解决方法是在外面套一层,然后对其count(*)SELECT COUNT(*) FROM (SELECT
MYSQL使用group by,如何查询出总记录数
2015-05-14

我们如何使用 ORDER BY 子句创建 MySQL 视图?

我们可以使用 MySQL ORDER BY 子句对结果集中的记录进行排序。 。为了理解带有视图的 GROUP BY 子句,我们使用具有以下数据的基表“Student_info”创建一个名为“Info”的视图 -mysql> Select *
2023-10-22

编程热搜

目录