4、数据库操作语句:聚合函数

目录

1、定义

2、常用的聚合函数

1)Avg/sum:只适用于数值类型的字段(或变量)。

2)Max/min:适用于数值类型、字符串类型、日期时间类型的字段(或变量)

3)Count:

①作用:I、计算指定字段在查询结果中出现的个数。II、在计算指定字段出现的个数时,不计算null值。

②如果计算表中有多少条记录,如何实现:

③如果需要统计表中的记录个条数,以上三种方式那个效率更高?

3、group by的使用

1)需求:查询各个部门的平均工资,最高工资。

2)使用多个列分组

3)需求:查询各个department_id,job_id的平均工资

4)在group by中使用with rollup,会在不使用with rollup的查询结果上多出一行数据,该数据是group by所有数据的平均数值,作用类似于avg函数。

4、Having的使用(作用:用来过滤数据)

1)如果过滤条件中使用了聚合函数,则必须使用having来替换where。否则,报错。并且having必须声明在group by的后面

2)在开发中使用HAVING 的前提是mql中使用了GROUP BY。

3)Where和having对比

5、SQL底层执行原理

1)Select 语句的完整结构

①SQL92语法

②SQL99语法

③Sql语句的执行过程


1、定义

定义:作用于一组数据,并对一组数据返回一个值

 

2、常用的聚合函数

1)Avg/sum:只适用于数值类型的字段(或变量)。

Select avg(salary),sum(salary),avg(salary)*107 from employees;

公式:avg=sum/count 在计算过程中自动将null值过滤掉。

select avg(commission_pct),sum(commission_pct)/count(commission_pct) from employees;

2)Max/min:适用于数值类型、字符串类型、日期时间类型的字段(或变量)

Select max(salary),min(salary) from employees;

Select max(last_name),min(last_name) from employees;

3)Count

①作用:I、计算指定字段在查询结果中出现的个数。II、在计算指定字段出现的个数时,不计算null值。

Select count(employee_id),count(salary) from employees;

Select count(1),count(2) from employees;//将每条记录看成1(或者2),结果为记录的条数。

②如果计算表中有多少条记录,如何实现:

方式一:count(*)

方式二:count(1)

方式三:count(字段)

③如果需要统计表中的记录个条数,以上三种方式那个效率更高?

I、如果使用的是myisam存储引擎,则三者效率相同O(1)

II、如果使用的是innodb存储引擎,则三者效率:count(*)=count(1)>count(字段)

III、方差、标准差、中位数

3、group by的使用

 

1)需求:查询各个部门的平均工资,最高工资。

Select dapartment_id,avg(salary),sum(salary) from employees group by department_id;//按照部门id分组,计算出各个部门的平均工资以及各个部门的工资总和。

2)使用多个列分组

 

3)需求:查询各个department_id,job_id的平均工资

Select department_id,job_id,avg(salary) from employees group by department_id,job_id;

错误案例:Select department_id,job_id,avg(salary) from employees group by department_id;

结论1:select中出现的非组函数的字符段必须声明在group by中。反之,group by中声明的字段可以不出现在select

结论2group by声明在from后面、where后面,order by前面、limit前面

4)在group by中使用with rollup,会在不使用with rollup的查询结果上多出一行数据,该数据是group by所有数据的平均数值,作用类似于avg函数。

Select  department_id,avg(salary) from employees group by department_id with rollup;

结论3:当使用with rollup时,不能同时使用order by子句进行结果排序,即with rolluporder by是互斥。

4、Having的使用(作用:用来过滤数据)

1)如果过滤条件中使用了聚合函数,则必须使用having来替换where。否则,报错。并且having必须声明在group by的后面

 

练习:查询各个部门中最高工资比10000高的部门信息

Select department_id,max(salary) from employee group by department_id having max(salary)>10000;

2)在开发中使用HAVING 的前提是mql中使用了GROUP BY。

练习:查询部门id10203040这个部门中最高工资比10000高的部门信息

方式一:Select department_id,max(salary)from employees where department_id in (10,20,30,40) group by department_id having max(salary)>10000;

方式二:select department_id,max(salary) from employees group by department_id having max(salary)>10000 and department_id in(120,20,30,40);

推荐方式一,原因:执行效率高

结论:当过滤条件中有聚合函数时,则此过滤条件必须声明在having

当过滤条件中没有聚合函数时,则此过滤条件声明在where中或having中都可以。但是,建议声明在where

3)Wherehaving对比

①从适用范围上讲,having的适用范围更广

②如果过滤条件中没有聚合函数:这种情况下,where的执行效率高于having

5、SQL底层执行原理

1)Select 语句的完整结构

①SQL92语法

Select ……….(存在聚合函数)

From ……..,…..,

Where 多表连接条件 and 不包含聚合函数的过滤条件

Group by …….

Having 包含聚合函数的过滤条件

Order by…,….(asc/desc)

Limit …,…

​​​​​​​②SQL99语法

Select ……….(存在聚合函数)

From …(left/right)join….on 多表连接条件 (left/right)join … on 多表连接条件

Where不包含聚合函数的过滤条件

Group by …….

Having 包含聚合函数的过滤条件

Order by…,….(asc/desc)

Limit …,…

③Sql语句的执行过程

From>on>(left/right join)>where>group by>having>select>distinct>order by>limit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/621.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot自定义starter之接口日志输出

文章目录 前言文章主体1 项目全部源码2 项目结构介绍3 starter 的使用3.1 配置文件 application,yml的内容3.2 启动类3.3 控制器类 4 测试结果 结语 前言 本文灵感来源是一道面试题。 要求做一个可以复用的接口日志输出工具,在使用时引入依赖,即可使用。…

OpenCV学习笔记 | ROI区域选择提取 | Python

摘要 ROI区域是指图像中我们感兴趣的特定区域,OpenCV提供了一些函数来选择和提取ROI区域,我们可以使用OpenCV的鼠标事件绑定函数,然后通过鼠标操作在图像上绘制一个矩形框,该矩形框即为ROI区域。本文将介绍代码的实现以及四个主要…

Vue中如何进行游戏开发与游戏引擎集成?

Vue中如何进行游戏开发与游戏引擎集成? Vue.js是一款流行的JavaScript框架,它的MVVM模式和组件化开发思想非常适合构建Web应用程序。但是,如果我们想要开发Web游戏,Vue.js并不是最合适的选择。在本文中,我们将介绍如何…

edge自带断网游戏

在没有网络时你会不会很无聊?博主告诉你一个edge浏览器自带的断网小游戏,让你在断网时也能玩游戏! 网址: 打开edge://surf这个断网游戏网站即可游玩: 作弊码既隐藏模式: 输入microsoft(意思就…

Axure教程——图片轮播(纵向滚动)

本文介绍的时用Axure中的动态面板制作图片轮播之纵向滚动 一、预览效果 预览地址:https://c1s4i1.axshare.com 二、功能描述 图片纵向自动滚动播放 三、元件制作 拖入一个动态面板,命名为1,设置大小为375*155,并设置四个状态&…

Python对csv文件一键多值保存为json本地文件再读取加速效率(3)

最近发现做办公自动化表格匹配的时候还是csv格式的文件最快、效率是最高的 今天接到一个需求就是大致内容之这样的 1、给我一张表格直邮一列A列,内容是运单号 2、需要用相同的单号去另外一张表格匹配数据 3、其实就是Excel中的常见的vlookup 但是想要匹配的表格有几…

基于Python所写的Word助手设计

点击以下链接获取源码资源: https://download.csdn.net/download/qq_64505944/87959100?spm1001.2014.3001.5503 《Word助手》程序使用说明 在PyCharm中运行《Word助手》即可进入如图1所示的系统主界面。在该界面中,通过顶部的工具栏可以选择所要进行的…

Pytorch实现多GPU并行训练(DDP)

Pytorch实现并行训练通常有两个接口:DP(DataParallel)和DDP(DistributedDataParallel)。目前DP(DataParallel)已经被Pytorch官方deprecate掉了,原因有二:1,DP…

VisualStudio离线包制作

因为需要,需要制作VisualStudio离线包,之前尝试了很多的方案,均没有下载成功。今天偶然看到一个可行的方案,这里在这里分享下。 从微软官网下载VisualStudio离线包 1 下载安装文件 visualstudio官网 首先进入到官网中&#xff0…

最小二乘法的原理及实现

1.最小二乘法的原理及实现 笔记来源于《白话机器学习的数学》 1.1 最小二乘法的原理 预测一个变量 x x x与一个变量 y y y的关系 例如:广告费 x x x与点击量 y y y 用直线拟合数据 1.2 最小二乘法的实现 广告费x和点击量y,找到一条直线表达式&#x…

MySQL数据表查询

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:进入MySQL知识专…

每天一点Python——day43

#第四十三天字典的视图操作: ①keys()获取字典中所有的键 ②values()获取字典中所有的值 ③items()获取字典中所有的键值对#如图: #例:获取所有的键 a{哥哥:18,妹妹:16,姐姐:17}#字典创立 ba.keys()#获取后我们存在变量b中,右边的…