SQL查询语句分步详解——多字段分组查询
多字段分组规则: 1.多字段分组时,分组字段出现顺序对于最终查询结果没有任何影响的。 group by deptno,job 与 group by job,deptno查询最终结果是一致的 2.多字段分组时,GROUP BY一次只能根据一个分组字段进行分组 GROUP BY DEPTNO,JOB ,此时GORUP BY需要执行两次 3.多字段分组时,从第二个分组字段开始,操作的是上一个分组字段生成的临时表。 GROUP BY DEPTNO,JOB.当执行group by job时,操作的临时表是由group by deptno生成的。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
需求:查询每个部门下各个职位的人数 SQL: SELECT DEPTNO,JOB,COUNT(*) FROM EMP GROUP BY DEPTNO,JOB #多字段分组(当前分组字段是两个分别是:DEPTNO和JOB) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第一步:执行FROM EMP 该命令的执行会在内存中生成一个与源表一样的临时表(第一个临时表) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第二步:执行 GROUP BY DEPTNO 1. 对第一个临时表DEPTNO字段下数据种类进行统计(当前临时表中DEPTNO字段下有3个不同的数据,分别是10、20和30,为此该命令执行完成后就会生成3个临时表)。 2. 将具有相同特征的数据行保存到同一个临时表。这些临时表全部生成后,前面由WHERE命令生成的临时表 (这里是第二个临时表)就会被销毁。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第三步:执行 group by job 该命令操作第二步生成三个临时表,需要依次对三个临时表在进行拆分 1.对每个临时表中的JOB字段下的数据进行统计, 第二个临时表JOB字段下有三个不同的数据(分别是:CLERK、MANAGER和ANALYST),为此第二个临时表会生成三个 全新的临时表,新的临时表生成后,第二个临时表就会被销毁。 第三个临时表JOB字段下也有三个不同的数据(分别是:SALESMAN、MANAGER和CLERK),为此第三个临时表也会生成三个全新的临时表,新的临时表生成之后,第三个临时表被销毁。 同样的原理,第四个临时表也会生成三个全新的临时表,新的临时表生成之后,第四个临时表被销毁。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第二个临时表生成的第五个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第二个临时表生成的第七个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第二个临时表生成的第七个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第三个临时表生成的第八个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第三个临时表生成的第九个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第三个临时表生成的第十个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第四个临时表生成的第十一个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第四个临时表生成的第十二个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由第四个临时表生成的第十三个临时表
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
第四步:执行 SELECT DEPTNO JOB COUNT(*) 由于SELECT 操作的临时表是由group by提供的多个临时表,SELECT将依次对每个临时表进行操作,它是读取相应字段下的第一个数据,将它们对应的字段合并成一列保存到一个新的临时表中。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
全新的临时表生成之后,由group by命令生成的所有临时表都会被销毁,最后MySQL服务器将最后生成的临时表推送给客户端,供操作者查阅。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL查询语句分步详解——多字段分组查询相关推荐
- SQL查询语句分步详解——SELECT...FROM...WHERE...GROUP BY...
GROUP BY : 分组查询命令 1.书写顺序: SELECT 字段名,函数,子查询 FROM 表名 WHERE 定位数据行条件 GROUP BY 分组字段 2.执行顺序: FROM-->WH ...
- SQL查询语句 select 详解
查询select: 1.单表查询 2.多表查询 3.嵌套查询分类 1)单表查询 2)多表查询 A.连接查询 B.子查询 ①一般子查询 ②相关子查询*************************** ...
- Elasticsearch(es) 查询语句语法详解
Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...
- 分析查询语句 EXPLAIN 详解
EXPLAIN 详解 一.概述 1.1.概述 二.基本语法 三.数据准备 1. 建表 2. 设置参数 log_bin_trust_function_creators 3. 创建函数 4. 创建存储过程 ...
- 玩转SQL语句之group by 多字段分组查询与having子句,一篇解决你的疑惑!
sql语句group by使用详解 group by的基本语法 基本语法 什么是分组查询(一个字段) 多个字段的分组查询 1.两个字段的分组查询 2.三个字段及N个字段进行分组查询 having子句的 ...
- 【MySQL】MySQL中的查询语句的详解----等值连接、左连接、右连接、全连接
用两个表(t_worker,t_depart),关联字段t_worker.deptno和t_depart.deptno来演示一下MySQL的等值连接.左连接.右连接.全连接.数据库表:t_worker ...
- mysql 分组查询 语句_详解MySQL中的分组查询与连接查询语句
分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...
- MySQL查询语句(select)详解
1.查询记录 select*from 表名 [where 条件];eg:select*from students;//查询 students 表中所有记录,所有字段的值都显示出来select fiel ...
- 数据分析 | SQL基础查询语句+例题详解
SQL 语法结构:select--from--where--group by--having--order by--limit 运行顺序: from--where--group by--having- ...
最新文章
- 小白都能看懂的神经网络教程:从原理到优化如此简单
- Promise详解,相信你看完我这篇文章简单的Promise使用方式基本上就全会了
- flink写入iceberg(没有搞完)
- 鬼才项斌,用人工智能推动教育服务创新
- nifity scaffold gem
- 6还是5?大还是小?看完这些动图,感觉数学白学了
- 百度打造AIR智能道路系统,可降低90%交通事故
- java $表示什么_java – 变量名中$的含义是什么?
- 音乐播放器界面如何设计?
- Android实例-手机安全卫士(三十五)-来电号码显示归属地
- Londiste3 Install
- c语言中字母后面的 是什么意思,C语言中括号里面一个字母是什么意思
- 立即从iOS 10和macOS Sierra下载壁纸
- 金蝶KIS应用虚拟化集成解决方案
- JavaScript设计模式——观察者模式
- intel服务器cpu芯片线路图,Intel CPU路线图:14nm一直用到2021年
- java多线程学习笔记--一.多线程的基础知识
- 【模式识别】Boosting
- 基于FaceX-Zoo实现的Face Mask Adding人脸戴口罩
- 30 款 IDEA 宝贝插件