当前位置: 首页 > news >正文

第14张 GROUP BY 分组

一、分组功能介绍

        使用group by关键字通过某个字段进行分组,对分完组的数据分别 “SELECT 聚合函数”查询结果。 

1.1 语法

SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
明确:可以使用GROUP BY子句将表中的数据分成若干组。WHERE一定放在FROM后面。接着是group by 和 order by,不能改变顺序。

注意:在 SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY子句中,包含在 GROUP BY 子句中的列不必包含在SELECT 列表中因为例如

SELECT department_id, job_id, SUM(salary)

FROM employees

GROUP BY department_id;

如果employees表中有department_id为10的记录10条,但是10条中job_id为1,2,2,4,5的记录各两条。如果按照上述SQL编写查询,只是对department_id分组,那么查询结果中job_id的值应该是“1”还是“2”亦或是其他值呢?所以这是不合理的,故除了组函数之外的列都要写在group by之中。

举例:

# 在SELECT列表中所有未包含在组函数中的列都应该包含在 GROUP BY子句中
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;# 包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
SELECT AVG(salary)
FROM employees
GROUP BY department_id;

1.2 使用多个列分组

# SELECT 中出现的非组函数的字段必须声明在GROUP BY中,反之,GROUP BY中声明的字段可以不出现在SELECT中
# 分组的字段之间顺序无所谓,最终结果相同。
SELECT department_id dept_id, job_id, SUM(salary)
FROM employees
GROUP BY department_id, job_id ;

注意:

分组的字段之间顺序无所谓,最终结果相同。

Mysql实现啊SQL规范不严谨,即使未遵守“SELECT 中出现的非组函数的字段必须声明在GROUP BY中,反之,GROUP BY中声明的字段可以不出现在SELECT中”,也可以得出结果,只是结果不对。Oracle对此就会报错。

1.3 GROUP BY中使用WITH ROLLUP

        使用 WITH ROLLUP 关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量。ROLLUP表示“归纳”。

举例:

SELECT department_id,AVG(salary)
FROM employees
WHERE department_id > 80
GROUP BY department_id WITH ROLLUP;

注意:当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的。理解为“归纳的那条数据不适合参与排序,因为他不属于原表中的记录。”

http://www.lryc.cn/news/481604.html

相关文章:

  • 笔记整理—linux驱动开发部分(10)input子系统与相关框架
  • [算法初阶]埃氏筛法与欧拉筛
  • 【THM】linux取证 DisGruntled
  • SpringBoot整合Freemarker(四)
  • centos docker 安装 rabbitmq
  • 手动实现promise的all,race,finally方法
  • H5移动端预览PDF方法
  • uniapp—android原生插件开发(1环境准备)
  • 《潜行者2切尔诺贝利之心》游戏引擎介绍
  • winform 加载 office excel 插入QRCode图片如何设定位置
  • 简易入手《SOM神经网络》的本质与原理
  • 21.assert断言
  • 15分钟学 Go 第 46 天 : 监控与日志
  • BFS 算法专题(四):多源 BFS
  • 基于Spring Boot+Vue的养老院管理系统【原创】
  • Linux screen和cscope工具使用总结
  • 深度学习面试八股汇总
  • 微服务架构面试内容整理-API 网关-Gateway
  • 22.04Ubuntu---ROS2使用rclcpp编写节点C++
  • XML 现实案例:深入解析与应用
  • Spring源码(十二):Spring MVC之Spring Boot
  • Kafka 之事务消息
  • 小菜家教平台(四):基于SpringBoot+Vue打造一站式学习管理系统
  • 解决 Vue3、Vite 和 TypeScript 开发环境下跨域的问题,实现前后端数据传递
  • 量化交易系统开发-实时行情自动化交易-3.3.数据采集流程
  • 探索PyAV:Python中的多媒体处理利器
  • SpringBoot源码解析(三):启动开始阶段
  • C# const与readonly关键字的区别
  • 【数据分享】1901-2023年我国省市县镇四级的逐年降水数据(免费获取/Shp/Excel格式)
  • hhdb数据库介绍(9-4)