| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 学习MySQL-第四章 -> 正文阅读 |
|
[大数据]学习MySQL-第四章 |
目录 16.2将之前的关键字全部组合在一起,来看一下他们的执行顺序 15,分组函数(多行处理函数)多行处理函数的特点特点:输入多行,最终输出一行 5个函数: ????????count 计数 ????????sum 求和 ????????avg 平均值 ????????max 最大值 ????????min 最小值 注意: 分组函数在使用的时候必须先进行分组,然后才能用 如果你没有对数据进行分组,整张表默认为一组 例:找出最高工资?
例:找出最低工资?
例:计算工资和?
例:计算平均工资?
14个工资全部加起来,然后除以14 例:计算员工数量?
15,1分组函数在使用的时候需要注意那些?第一点:分组函数自动忽略NULL,你不需要提前对NULL进行处理 第二点:分组函数中count(*)和count(具体字段)有什么区别? count(具体字段):统计该字段下所有不为NULL的元素的总数 count(*):统计表当中的总行数。(只要有一行数据count++) 因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行 数据就是有效的 第三点:分组函数不能够直接使用在where子句中 例:找出比最低工资高的员工信息
表面上没问题,但是运行会报错 ?这个后面分组查询会说! 第四点:所有的分组函数可以组合起来一起用
16,分组查询(非常重要)16.1什么是分组查询?在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行 操作。这个时候我们需要使用分组查询,怎么进行分组查询呢?
例:计算每个部门的工资和? ????????计算每个工作岗位的平均薪资? ????????找出每个工作岗位的最高薪资? 16.2将之前的关键字全部组合在一起,来看一下他们的执行顺序
以上关键字的顺序不能颠倒,需要记忆 执行顺序是什么: ????????1,from ????????2,where ????????3,group by ????????4,select ????????5,order by 这里我们就可以回答前面提出的问题了 为什么分组函数不能直接使用在where后面?
因为分组函数在使用的时候必须先分组之后才能使用 从上面的执行顺序可以看出,先执行的where,后执行的group by where在执行的时候,还没有分组。所以where后面不能出现分组函数
这个没有分组,为啥sum()函数可以用呢? 从上面的执行顺序可以看出,select在group by之后执行 语法格式上已经执行过了group by,虽然没有出现group by,但是默认分成了 一组 所以在执行select之前已经分好组了,所以可以这样用 16.3找出每个工作岗位的工资和?实现思路:按照工作岗位分组,然后对工资求和
因为是对job分组,和ename没有关系 比如说job有四种,ename有14种,这样是不能在一起分组的 重点结论: 在一条select语句当中,如果有group by语句的话 select后面只能跟:参加分组的字段,以及分组函数 其他的一律不能跟 16.4找出每个部门的最高薪资?实现思路是什么:按照部门分组,然后对工资求最大值
16.5找出每个部门中不同工作岗位的最高薪资?前面我们都是单独对一个字段进行分组,这里我们要对两个字段进行分组 技巧:两个字段联合成一个字段看
16.6使用having可以对分完组之后的数据进一步过滤注意: having不能不能单独使用,having不能代替where,having必须和group by联合使用 例:找出每个部门的最高薪资,要求显示最高薪资大于3000的?
思考一个问题:以上的sql语句执行效率是不是低? 比较低,实际上可以这样考虑:先将大于3000的都找出来,然后再分组 先利用where将大于3000的找出来,在利用group by分组
优化策略:where和having,优先选择where,where实在完成不了,再选择having 16.7where完成不了,需要having解决的例:找出每个部门平均薪资,要求显示平均薪资高于2500的? 这个例子就能用where优化了,因为where不能筛选平均工资 所以这里只能用having优化
20,大总结(单表的查询学完了)20,1关键字顺序
以上关键字只能按照下面这个顺序来,不能颠倒! 20,2执行顺序:
20,3流程:从某张表中查询数据 先经过where条件筛选选出有价值的数据 对这些有价值的数据进行分组 分组之后可以使用having继续筛选 select查询出来 最后排序输出 例:找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER之外 要求按照平均薪资降序输出
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:32:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |