sql之聚合函数

小编 2026-06-29 阅读:876 评论:0
最近忙里头像,温习了一下聚合函数 聚合函数在计算时会自动忽略空值,不用手动写sql将空值排除。 聚合函数不能直接写在where语句的后面。 sum()求和函数 取得薪水的合计: select su...

最近忙里头像,温习了一下聚合函数

聚合函数在计算时会自动忽略空值,不用手动写sql将空值排除。
聚合函数不能直接写在where语句的后面。

sum()求和函数

取得薪水的合计:

select sum(sal) from emp;

取得总共薪水(工资+补助)合计:

select sum(sal+ifnull(comm,0)) from emp;

avg()取平均值函数

取得平均薪水:

select avg(sal) as avgsal from emp;

max()取得最大值函数

取得最高薪水:

select max(sal) as maxsal from emp;

取得最晚入职的日期:

select max(hiredate) as lastemp from emp;

说明:日期也可以使用max()函数进行比较

min()取得最小值函数

取得薪水最低值:

select min(sal) as minsal from emp;

count()取得数据总数

取得所有员工数:

select count(*) from emp;

取得补助不为空的员工数:

select count(comm) from emp;

说明:count()函数不会统计数据为null的记录

统计没有补助的员工数:

select count(*) from emp where comm is null;

组合聚合函数

sum、avg、max、min、count这些函数可以一起使用:

select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;

distinct去除重复记录

作用:将查询结果中某一字段的重复记录去除掉
用法:distinct 字段名或 distinct字段名1, 字段名2…
注意:distinct只能出现在所有字段最前面,后面如果有多个字段及为多字段联合去重。

查询公司有哪些工作岗位:

select distinct job from emp;

查询公司工作岗位数量:

select count(distinct job) from emp;

去除部门编号deptno和工作岗位job重复的记录:

select distinct job,deptno from emp;

说明:会去除job和deptno同时相同的记录

group by分组

找出每个职位的最高薪水:

select max(sal) as maxsal from emp group by job;

说明:按照工作岗位分组,分组后计算每个工作岗位的最高薪水,还可以这样写:

select job,max(sal) as maxsal from emp group by job;

下面写法不正确,注意:在有group by的DQL询句中,select语句后面只能跟 聚合函数 + 参与分组的字段
select ename,job,max(sal) as maxsal from emp group by job;

计算每个工作岗位的最高薪水,并且按照由低到高进行排序:

select job,max(sal) as maxsal from emp group by job order by maxsal;

说明:按照工作岗位分组,分组后计算每个工作岗位的最高薪水,之后再根据薪水排序。注意order by语句只能放在group by语句后面。

计算每个部门的平均薪水:

select deptno,avg(sal) as avgsal from emp group by deptno;

计算出不同部门不同岗位的最高薪水:

select deptno,job,max(sal) as maxsal from emp group by deptno,job;

说明:group by后面可以写多个字段,数据库会分别对这些字段进行分组。

计算除了manager之外的每个工作岗位的最高薪水:

select job,max(sal) as maxsal from emp where job <> \'MANAGER\' group by job;

说明:先将manager排除,然后进行分组计算。

having过滤
作用:如果想对分组的数据进行过滤,需要使用having子句。

找出每个工作岗位的平均薪水,要求显示平均薪水大于2000的:

select job,avg(sal) as avgsal from emp where avg(sal)>2000 group by job;

上面写法不正确,where后面不能直接使用聚合函数。

正确写法需要使用having来过滤:

select job,avg(sal) from emp group by job having avg(sal) > 2000;

注意:能够在where后过滤的数据不要放到having中进行过滤,否则影响SQL询句的执行效率。

where和having区别

  • where和having都是为了完成数据的过滤,它们后面都是添加条件;
  • where是在 group by之前完成过滤;
  • having是在group by之后完成过滤;

select语句总结

一个的SQL语句如下:

select 
    xxxx
from
    xxxx
where 
    xxxx
group by
    xxxx
having
    xxxx
order by
    xxxx

以上关键字的顺序不能变,严格遵守
以上语句的执行顺序:

  • from 将硬盘上的表文件加载到内存
  • where:将符合条件的数据筛选出来。生成一张新的临时表
  • group by :根据列中的数据种类,将当前临时表划分成若干个新的临时表
  • having : 可以过滤掉group by生成的不符合条件的临时表
  • select : 对当前临时表进行整列读取
  • order by : 对select生成的临时表,进行重新排序,生成新的临时表
  • limit : 对最终生成的临时表的数据行,进行截取
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
标签列表