`
日光倾城。
  • 浏览: 85918 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

mysql group by 和order by 执行顺序

阅读更多
Mysql 中group by 和 order by的顺序问题:


1: select historyId ,userId, date from history  group by userId  order by historyId desc;
以上1代码查询的结果是这样的:
+-----------+--------+---------------------+
| historyId | userId | date                |
+-----------+--------+---------------------+
|       317 |    139 | 2010-08-28 18:12:11 |
|       310 |    138 | 2010-08-28 17:35:52 |
|       306 |    137 | 2010-08-28 17:30:20 |
|       303 |    135 | 2010-08-28 17:25:20 |
|       292 |    131 | 2010-08-27 17:43:43 |
|       274 |     38 | 2010-08-26 11:42:28 |
|       258 |    100 | 2010-08-25 15:01:46 |
|       249 |      2 | 2010-08-20 18:37:02 |
|       233 |     10 | 2010-08-23 17:58:42 |
|       162 |     31 | 2010-08-19 16:56:09 |
|       151 |     39 | 2010-08-19 15:48:33 |
|       124 |      1 | 2010-08-19 10:01:24 |
+-----------+--------+---------------------+
说明是先group by user_id 然后再 order by historyId 的。那么怎样让程序先执行order by historyId ?

这样可以行的通:

2;select historyId ,userId,date from (select * from history order by historyId desc) c group by userId order by historyId desc;
以上代码2查询的结果是这样的:
+-----------+--------+---------------------+
| historyId | userId | date                |
+-----------+--------+---------------------+
|       394 |      1 | 2010-09-03 14:45:30 |
|       386 |    100 | 2010-09-03 11:39:08 |
|       381 |      2 | 2010-09-02 19:43:33 |
|       335 |     39 | 2010-08-31 15:28:27 |
|       318 |    139 | 2010-08-28 18:12:53 |
|       316 |    138 | 2010-08-28 18:10:40 |
|       309 |    137 | 2010-08-28 17:31:02 |
|       305 |    135 | 2010-08-28 17:26:23 |
|       296 |    131 | 2010-08-27 17:55:41 |
|       284 |     38 | 2010-08-26 16:46:06 |
|       233 |     10 | 2010-08-23 17:58:42 |
|       218 |     31 | 2010-08-23 15:46:02 |
+-----------+--------+---------------------+
很明显:代码2执行的结果告诉我们查询的顺序是先通过order by 排序,在通过group by 排序 ,最后通过 order 对这个查询结果进行一个整体的排序。
分享到:
评论
1 楼 xbm376 2011-01-17  
楼主把问题想复杂了吧? 不过倒是跟你学了些新的sql语法

相关推荐

    深入解析mysql中order by与group by的顺序问题

    mysql 中order by 与group by的顺序是:selectfromwheregroup byorder by注意:group by 比order by先执行,order by不会对group by 内部进行排序,如果group by后只有一条记录,那么order by 将无效。要查出group ...

    深度分析mysql GROUP BY 与 ORDER BY

    本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表   我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下   明显。这不是我想...

    【mysql知识点整理】— order by 、group by 出现Using filesort原因详解

    MySQL中的`ORDER BY`和`GROUP BY`是SQL查询中两个关键的子句,它们用于对查询结果进行排序和分组。然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`...

    mysql中count(), group by, order by使用详解

    在MySQL中,`COUNT()`, `GROUP BY`, 和 `ORDER BY` 是三个非常重要的SQL语句组成部分,它们各自承担着不同的职责,同时也常被结合在一起使用以满足复杂的数据查询需求。 `COUNT()` 是一个聚合函数,它用于计算指定...

    mysql中order by与group by的区别

    order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是... 您可能感兴趣的文章:sql中 order by 和 group by的区别深度分析mysql GROUP BY 与 ORDER BYgroup by,having,o

    Mysql中order by、group by、having的区别深入分析

    在MySQL中,`ORDER BY`、`GROUP BY` 和 `HAVING` 是SQL查询中用于数据处理的关键子句,它们各自承担着不同的职责,对于数据分析和报表生成至关重要。 `ORDER BY` 子句用于对查询结果进行排序。它遵循升序(ASC)或...

    Mysql利用group by分组排序

    首先先按某个字段进行order by,然后把有顺序的表进行分组,这样每组的成员都是有顺序的,而mysql默认取得分组的第一行。从而得到每组的最值。 select id, (@rowno := @rowno + 1) as rank, score, (C.end_ti

    MySQL Order By索引优化方法

    MySQL的`ORDER BY`和`GROUP BY`子句在执行查询时,对于性能的影响是显著的,尤其是在大数据量的表中。为了提高查询效率,索引优化显得至关重要。本文将详细介绍如何利用索引来优化`ORDER BY`操作。 首先,MySQL在...

    MySQL高级查询之与Group By集合使用介绍

    如果想去除重复值并按特定顺序排序,可以在`GROUP_CONCAT`内部使用`DISTINCT`和`ORDER BY`,如`GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')`。 `WITH ROLLUP`是`GROUP BY`的一个...

    分组查询GROUP BY的使用与SQL执行顺序的讲解

    这是因为GROUP BY本身并不保证输出结果的顺序,而ORDER BY确保了数据按照特定列的值进行排序。 SQL SELECT语句的执行顺序是这样的: 1. FROM子句组合来自不同数据源的数据。 2. WHERE子句根据指定条件筛选记录行。 ...

    My SQL group by取同组第一条

    在MySQL 8.0中,为了解决这个问题,你需要确保`ORDER BY`和`LIMIT`子句结合使用,因为`GROUP BY`不再保证按排序顺序返回结果。正确的查询可能是这样的: ```sql SELECT SwipeID, MemberID, AddTime FROM ( SELECT ...

    MySQL数据库优化SQL篇PPT课件.pptx

    从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和Count等方面对MySQL数据库优化进行了详细的讲解。 一、执行计划 执行计划是MySQL数据库优化的重要步骤。执行计划...

    MySQL DQL - 执行顺序.md

    它位于查询的最后阶段之一,但在实际执行过程中,在`FROM`、`WHERE`、`GROUP BY`和`HAVING`之后进行计算。 **语法示例:** ```sql SELECT column1, column2 FROM table_name WHERE condition; ``` #### 6. `ORDER ...

    MySQL分组查询Group By实现原理详解

    所以,在GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引。  在MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的...

    Mysql 关键字执行顺序

    MySQL 关键字执行顺序是数据库查询优化的重要概念,它直接影响着SQL语句的性能和结果。下面我们将详细探讨这些关键字的执行流程,并解答一些常见疑问。 首先,MySQL的执行顺序如下: 1. FROM:首先执行FROM子句,...

    SQL语句执行深入讲解(MySQL架构总览-查询执行流程-SQL解析顺序)

    本文将深入探讨MySQL数据库系统中的SQL语句执行过程,包括MySQL的架构总览、查询执行流程以及SQL语句的解析顺序。 首先,我们来看MySQL的架构总览。MySQL架构分为两个主要层次:SQL Layer(SQL层)和Storage Engine...

    MySQL之聚合查询、分组和排序

    下面是一个综合示例,展示如何结合使用`GROUP BY`、`HAVING`和`ORDER BY`: - 假设我们需要找出各个性别的学生数量,并只显示那些学生数量超过2人的性别,并按照学生数量降序排列。 - SQL 查询语句: - `SELECT ...

Global site tag (gtag.js) - Google Analytics