教程来源:B站视频BV1Vy4y1z7EX
我听课整理的课程的完整笔记,供大家学习交流下载:夸克网盘分享
本文内容为完整笔记的第五篇
17、单行数据处理函数P30-36&分组函数
- 17.1、数据处理函数又被称为单行处理函数单行处理
- 函数的特点:一个输入对应一个输出。
- 和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)
- 17.2、单行处理函数常见的有哪些?
- 1、Lower 转换小写
-
- 2、upper 转换大写
-
- 3、substr 取子串(substr(被截取的字符串,起始下标,截取的长度))
-
- 案例:首字母大写?
-
- 4、length 取长度
空格是as省略重命名的意思
-
- 5、trim 去空格
-
- 6、str_to_date 将字符串转换成日期
- 7、date format格式化日期
- 8、format 设置千分位
- 9、round 四舍五入
- select后面也可以跟字面量/字面值(数据)
-
-
- 保留整数位,1位小数,2位小数
-
-
-
- 保留到十位
-
-
- 10、rand()生成随机数
- rand()生成0-1之间的随机数,可以对其处理成100以内随机数
- 10、rand()生成随机数
-
- 11、ifnull 可以将 null 转换成一个具体值
- ifnull是空处理函数。专门处理空的.
- 在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL.
- 11、ifnull 可以将 null 转换成一个具体值
-
-
- 注意:NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnul1函数,ifnul1函数用法:1fnul1(数据.被当做哪个借)
- 如果"数据"为NULL的时候,把这个数据结构当做哪个值。
- 补助为NULL的时候,将补助当做0
-
-
- 12、case..when..then..when..then..else..end
- 当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。(注意:不修改数据库,只是将查询结果显示为工资上调)
- 12、case..when..then..when..then..else..end
- 18、分组函数(多行处理函数)
- 多行处理函数的特点:输入多行,最终输出一行。
- 5个:
- count计数
- sum求和
- avg平均值
- max最大值
- min最小值
- 注意:
- 分组函数在使用的时候必须先进行分组,然后才能用。
- 如果你没有对数据进行分组,整张表默认为一组。
- 五个分组函数使用示例
- 找出最高工资?
-
-
- 找出最低工资?
-
-
-
- 计算工资和:
-
-
-
- 计算平均工资:
-
-
-
- 计算员工数量?
-
-
- 分组函数在使用的时候需要注意哪些?
- 第一点:分组函数自动忽略NULL,你不需要提前对NULL进行处理。
- 分组函数在使用的时候需要注意哪些?
-
-
- 第二点:分组函数中count(*)和count(具体字段)有什么区别?
-
-
-
- 第三点:分组函数不能够直接使用在where子句中。
-
-
-
- 第四点:所有的分组函数可以组合起来一起用。
-
- 19、分组查询(非常重要:五颗星*****)
- 19.1、什么是分组查询?
- 在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作。
- 这个时候我们需要使用分组查询,怎么进行分组查询呢?
- 19.1、什么是分组查询?
-
- 19.2、将之前的关键字全部组合在一起,来看一下他们的执行顺序?
- 关键词
- 19.2、将之前的关键字全部组合在一起,来看一下他们的执行顺序?
-
-
- 以上关键字的顺序不能颠倒,需要记忆.
- 执行顺序是什么?
-
-
-
- 为什么分组函数不能直接使用在where后面?
-
-
-
- 为什么没分组,select后面也可以直接用分组函数?
-
-
- 19.3、找出每个工作岗位的工资和?
- 实现思路:按照工作岗位分组,然后对工资求和。
- 19.3、找出每个工作岗位的工资和?
-
-
- select后面只能跟:参加分组的字段,以及分组函数。
-
-
-
- 重点结论:
- 在一条select语句当中,如果有group by语句的话,select后面只能跟:参加分组的字段,以及分组函数。
- 其它的一律不能跟。
- 重点结论:
- 19.4、找出每个部门的最高薪资
- 实现思路是什么?
- 按照部门编号分组 ,求每一组的最大值。
- 实现思路是什么?
-
-
- 19.5、找出"每个部门,不同工作岗位"的最高薪资?
- 技巧:两个字段联合成1个字段看。(两个字段联合分组)
- 19.5、找出"每个部门,不同工作岗位"的最高薪资?
-
- 19.6、使用having可以对分完组之后的数据进一步过滤。
- having不能单独使用,having不能代替where,
- having必须和group by联合使用
- 找出每个部门最高薪资,要求显示最高薪资大于3000的?
- 19.6、使用having可以对分完组之后的数据进一步过滤。
-
-
- 思考一个问题:以上的sql语句执行效率是不是低?
- 比较低,实际上可以这样考虑:先将大于3000的都找出来,然后再分组.
- 思考一个问题:以上的sql语句执行效率是不是低?
-
-
-
-
- 优化策略:where和having优先选where,where实在完成不了了,再选择having
-
- 19.7、where没办法的????
- 找出每个部门平均薪资,要求显示“平均薪资”高于2500的。
-
- 20、大总结(单表的查询学完了)
- 已学关键词和顺序
-
- 执行过程顺序
- from从某张表中查询数据,
- 先经过where条件筛选出有价值的数据
- group by对这些有价值的数据进行分组.
- 分组之后可以使用having继续筛选.
- select查询出来.
- 最后order by排序输出!
- 找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER岗位之外,要求按照平均薪资降序排。
- 执行过程顺序