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 对这个查询结果进行一个整体的排序。
分享到:
相关推荐
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.下面是我模拟我的内容表 我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下 明显。这不是我想...
MySQL中的`ORDER BY`和`GROUP BY`是SQL查询中两个关键的子句,它们用于对查询结果进行排序和分组。然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`...
在MySQL中,`COUNT()`, `GROUP BY`, 和 `ORDER BY` 是三个非常重要的SQL语句组成部分,它们各自承担着不同的职责,同时也常被结合在一起使用以满足复杂的数据查询需求。 `COUNT()` 是一个聚合函数,它用于计算指定...
order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是... 您可能感兴趣的文章:sql中 order by 和 group by的区别深度分析mysql GROUP BY 与 ORDER BYgroup by,having,o
在MySQL中,`ORDER BY`、`GROUP BY` 和 `HAVING` 是SQL查询中用于数据处理的关键子句,它们各自承担着不同的职责,对于数据分析和报表生成至关重要。 `ORDER BY` 子句用于对查询结果进行排序。它遵循升序(ASC)或...
首先先按某个字段进行order by,然后把有顺序的表进行分组,这样每组的成员都是有顺序的,而mysql默认取得分组的第一行。从而得到每组的最值。 select id, (@rowno := @rowno + 1) as rank, score, (C.end_ti
MySQL的`ORDER BY`和`GROUP BY`子句在执行查询时,对于性能的影响是显著的,尤其是在大数据量的表中。为了提高查询效率,索引优化显得至关重要。本文将详细介绍如何利用索引来优化`ORDER BY`操作。 首先,MySQL在...
如果想去除重复值并按特定顺序排序,可以在`GROUP_CONCAT`内部使用`DISTINCT`和`ORDER BY`,如`GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')`。 `WITH ROLLUP`是`GROUP BY`的一个...
这是因为GROUP BY本身并不保证输出结果的顺序,而ORDER BY确保了数据按照特定列的值进行排序。 SQL SELECT语句的执行顺序是这样的: 1. FROM子句组合来自不同数据源的数据。 2. WHERE子句根据指定条件筛选记录行。 ...
在MySQL 8.0中,为了解决这个问题,你需要确保`ORDER BY`和`LIMIT`子句结合使用,因为`GROUP BY`不再保证按排序顺序返回结果。正确的查询可能是这样的: ```sql SELECT SwipeID, MemberID, AddTime FROM ( SELECT ...
从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和Count等方面对MySQL数据库优化进行了详细的讲解。 一、执行计划 执行计划是MySQL数据库优化的重要步骤。执行计划...
它位于查询的最后阶段之一,但在实际执行过程中,在`FROM`、`WHERE`、`GROUP BY`和`HAVING`之后进行计算。 **语法示例:** ```sql SELECT column1, column2 FROM table_name WHERE condition; ``` #### 6. `ORDER ...
所以,在GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引。 在MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的...
MySQL 关键字执行顺序是数据库查询优化的重要概念,它直接影响着SQL语句的性能和结果。下面我们将详细探讨这些关键字的执行流程,并解答一些常见疑问。 首先,MySQL的执行顺序如下: 1. FROM:首先执行FROM子句,...
本文将深入探讨MySQL数据库系统中的SQL语句执行过程,包括MySQL的架构总览、查询执行流程以及SQL语句的解析顺序。 首先,我们来看MySQL的架构总览。MySQL架构分为两个主要层次:SQL Layer(SQL层)和Storage Engine...
下面是一个综合示例,展示如何结合使用`GROUP BY`、`HAVING`和`ORDER BY`: - 假设我们需要找出各个性别的学生数量,并只显示那些学生数量超过2人的性别,并按照学生数量降序排列。 - SQL 查询语句: - `SELECT ...