sql 里的 order by 和 group by 的区别

本文介绍了SQL中的GROUP BY和ORDER BY的用法。GROUP BY用于按指定字段对数据进行分类汇总,通常与聚合函数如SUM、COUNT等一起使用。ORDER BY则用于对查询结果进行排序,支持升序和降序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

order by  是按字段排序
group by  是按字段分类
    order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。
     group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
   什么是“聚合函数”?
   像sum()、count()、avg()等都是“聚合函数”
   使用group by 的目的就是要将数据分类汇总。
   一般如:
          select 单位名称,count(职工id),sum(职工工资) form [某表]
          group by 单位名称
          这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总额。

   在sql命令格式使用的先后顺序上,group by 先于 order by。
       select 命令的标准格式如下:
       SELECT select_list    
      [ INTO new_table ]    
      FROM table_source    
      [ WHERE search_condition ]    
      [ GROUP BY group_by_expression ]    
      [ HAVING search_condition ]    
      [ ORDER BY order_expression [ ASC | DESC ] ]

这两个是很像.
order by是按指定的列的升序或降序来给查询结果排序,
它不需要查询结果中出现order by的栏位.
更改Order by里的栏位只会影响查询结果的顺序,而不影响查询出的记录总数,和每条记录的内容.

group by是按指定的列对满足Where条件的所有记录分组,并对组内的一些数值型栏位计算出每组的一个统计指标,如求和、求个数、求平均值、求最大值、求最小值、、、、、、、
它对查询结果有个要求:查询结果中的出现的栏位必须是Group by中栏位的子集。
更改Group by里栏位的顺序不会对查询结果有任何影响;
但是更改Group by的栏位,会对查询得到的记录数量,以及各个汇总函数的结果造成影响。

 

### SQLOrder By Group By 同时使用的规则 在 SQL 查询中,`GROUP BY` 子句用于将数据分组,通常与聚合函数一起使用;而 `ORDER BY` 则用于对最终结果集进行排序。两者的组合使用需要遵循特定的语法规则。 #### 执行顺序 在一个查询中同时存在 `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY` 的情况下,其执行顺序如下[^1]: 1. **FROM**: 数据源表的选择。 2. **WHERE**: 过滤不符合条件的数据行。 3. **GROUP BY**: 将符合条件的数据按指定列分组。 4. **HAVING**: 对分组后的数据进一步过滤(允许使用聚合函数)。 5. **SELECT**: 选择要显示的字段或计算表达式。 6. **ORDER BY**: 对最终结果集进行排序。 因此,尽管书写上可能先写 `GROUP BY` 而后写 `ORDER BY`,但在实际执行过程中,`ORDER BY` 是最后一步操作。 #### 正确语法 当 `GROUP BY` `ORDER BY` 需要在同一查询中使用时,应按照以下结构编写[^3]: ```sql SELECT column_list, aggregate_functions(...) FROM table_name WHERE condition GROUP BY grouping_columns ORDER BY sorting_columns; ``` 其中: - `column_list`: 可以是具体的列名或者由聚合函数组成的表达式。 - `aggregate_functions(...)`: 像 `SUM()`, `COUNT()`, `AVG()` 等这样的聚合函数。 - `grouping_columns`: 必须出现在 SELECT 子句中的非聚合列。 - `sorting_columns`: 定义排序依据的列或表达式。 注意:如果希望基于某个聚合值来排序,则可以在 ORDER BY 中引用该聚合函数的结果。 #### 使用注意事项 1. 当 `GROUP BY` 出现时,`SELECT` 子句的每一项要么是非分组列上的聚合函数应用,要么就是参与分组的关键字本身。 2. 如果尝试通过 `ORDER BY` 来调整未被包含于任何集合运算符内的单个记录位置,则需确保这些字段也已声明给 GROUP BY 或者作为独立项目存在于 SELECT 输出列表之中。 3. 在某些数据库实现(如 HiveSQL),对于大规模分布式处理环境下的复杂查询优化器行为可能会带来额外约束条件。 ```sql -- 示例代码展示如何联合运用 GROUP BY ORDER BY SELECT department_id, COUNT(*) AS employee_count FROM employees WHERE salary > 5000 GROUP BY department_id ORDER BY employee_count DESC; -- 按照雇员数量降序排列各部门信息 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值