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

Group By和Order By一起使用的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Group By和Order By一起使用的问题

又是那个百万级数据的数据库表……原本使用分组后查询语句正常运行,现在新的需求要求每个分组的数据显示最新一条,未加Order By之前的查询语句如下,每个分组数据会默认取第一条

SELECT     * FROM     table1 WHERE         columnX = xxx GROUP BY column_1

因Order By无法使用在Group By之前,使用在Group By之后只能实现分组后的数据排序,不符合需求,故需要套用子查询,改为

SELECT * FROM (    SELECT         *     FROM         table1     WHERE             columnX = xxx    ORDER BY create_time DESC)  GROUP BY column_1

然而,Order By并未生效Group By 比Order By先执行,Order By不会对Group By内部进行排序,如果Group By后只有一条记录,那么Order By将无效

这里借鉴了(Mysql踩坑)Mysql关于同时使用Group by 和Order by问题_rens-_-的博客-CSDN博客 在工作中,有个业务逻辑【类似】需要获取每个用户最高的奖励金额,一开始想到的是先使用group by 对用户进行分组,再order by 按照时间降序排列。(表结构和数据如下)SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for reward...https://blog.csdn.net/m0_37830658/article/details/103583107

的写法,在Order By之后加入LIMIT,鉴于是百万级别数据,直接LIMIT 10000000一千万,然后生效确实生效了,但是相关博客都没有考虑过这个问题,查询时间直接起飞了,本身百万数据在条件语句查询之后返回时间就在2-3秒左右,一个Limit下去,查询时间直接奔着20秒去了……

SELECT * FROM (    SELECT         *     FROM         table1     WHERE             columnX = xxx    ORDER BY create_time DESC LIMIT 10000000)  GROUP BY column_1

针对这种情况,只有将sql改为(针对百万数据,查询速度约达到5-6秒):

SELECT     * , MAX(create_time)FROM     table1 WHERE         columnX = xxx GROUP BY column_1

结果集中可以看到MAX(create_time)和create_time的区别,但是这种情况下,虽然返回了最新一条数据的时间,但是数据本身对应的仍是第一条而不是最新一条,只能选择性显示不变的字段,暂时没有更好的办法。

经研讨,此处最好的解决办法依然是分表,参照table1的结构做一个最新数据表table2出来,插入数据时同时插入table1和table2,只不过table1存储全量数据,table2存储最新数据,即,table2删除现有的column_1下数据再插入新的一条,这样保证每个column_1只对应一条最新数据。查询将分为针对table2的全量查询,和针对table1具体column_1的查询。这样在插入每条数据的时候多了一个删除和插入的操作,但是极大地提高了查询的性能。

来源地址:https://blog.csdn.net/tabvla/article/details/127688469

免责声明:

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

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

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

union和子查询中order by一起使用导致排序失效问题及解决

目录一、前言二、问题列举2.1 子查询中不能使用order by2.2 子查询order by无效2.3 排序条件不够严格导致分页数据重复总结一、前言分页查询的需求如同家常便饭,多数情况下主要利用order by和limit即可实现,有些
2022-12-27

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

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

解读SQL中GROUP BY和HAVING子句中使用NULL条件问题

目录SQL中GROUP BY和HAVING子句中使用NULL条件1. HAVING BATch IS NULL 没有数据的原因2. HAVING SUM(CASE WHEN batch IS NULL THEN 1 ELSE 0 END)
解读SQL中GROUP BY和HAVING子句中使用NULL条件问题
2024-10-16

MySql分页时使用limit+order by会出现数据重复问题解决

目录摘要问题描述分析问题解决问题摘要能把复杂的知识讲的简单很重要在学习的过程中我们看过很多资料、视频、文档等,因为现在资料视频都较多所以往往一个知识点会有多种多样的视频形式讲解。除了推广营销以外,确实有很多人的视频讲解非常优秀,例如李永乐老
2022-05-15

SpringBoot异步与事务一起使用的问题解决

本文主要介绍了SpringBoot异步与事务一起使用的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-18

SQLServer 错误 8710 必须提供与 CUBE、ROLLUP 或 GROUPING SET 查询一起使用的聚合函数,才能合并子聚合。 若要修复此问题,请删除该聚合函数或在 GROUP BY

详细信息 Attribute 值 产品名称 MSSQLSERVER 事件 ID 8710 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 QUERY2_CUBE_ILLEGAL_AGG_FUNC ...
SQLServer 错误 8710 必须提供与 CUBE、ROLLUP 或 GROUPING SET 查询一起使用的聚合函数,才能合并子聚合。 若要修复此问题,请删除该聚合函数或在 GROUP BY
2023-11-05

union和子查询中orderby一起使用导致排序失效问题及解决

这篇文章主要介绍了union和子查询中orderby一起使用导致排序失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-27

使用Spark时的一些常见问题和解决办法

这篇文章主要讲解了“使用Spark时的一些常见问题和解决办法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用Spark时的一些常见问题和解决办法”吧!1、首先来说说spark任务运行完后查
2023-06-02

JSP数据和JavaScirpt数据交互使用问题的一种解决方法 (转)

JSP数据和JavaScirpt数据交互使用问题的一种解决方法 (转)[@more@]JSP数据和JavaScirpt数据交互使用问题的一种解决方法 对于web程序来说,前端(Javascript)和后端(JSP/servlet)是没法共
2023-06-03

编程热搜

目录