主流数据库之一篇文搞懂聚合函数

文章目录

 

目录

文章目录

前言

聚合函数

COUNT()函数

AVG(列)函数和SUM(列)函数

MAX(列)和MIN(列)函数

GROUP BY子句的应用

HAVING子句的使用


前言

大家好,我是ice三分颜色。个人主页:ice三分颜色的博客

本文讲了有关聚合函数的知识,包含求平均值,求和,统计数量,求最大值最小值。

走过路过的小伙伴们点个赞和关注再走吧,欢迎评论区交流,努力什么时候开始都不算晚,那不如就从这篇文章开始!

大家一起成长呀!笔芯


聚合函数

单行函数一次只对一行记录进行操作,每个操作行都返回一行输出结果。聚合函数是对一批数据进行操作之后返回单个的值。这批数据可能是整个表,也可能是按某种条件把该表分成的组。聚合函数主要用于汇总统计数据。

常用聚合函数

avg(列):返回组中列数据的平均值,忽略null值

count(*|列):返回组中列的数量

max(列):返回组中列数据比较的最大值,忽略null值

min(列):返回组中列数据比较的最小值,忽略null值

sum(列):返回组中数据的和,忽略null值

COUNT()函数

用于统计记录数。

对于除*以外的任何参数,返回所选择聚合中非null值的行的数目;对于参数*,返回选择聚合所有行的数目,包含null值的行。

例子:

我的employee表如下。

实现统计公司的员工总数(使用COUNT(*)与COUNT(empno)都可以实现对员工数的统计。其中COUNT(*)表示统计表中的所有记录行数;COUNT(empno)表示统计empno列不为NULL的记录行数。由于empno是employee表的主键(非空、不重复),因此通过此列的统计结果与使用*操作符相同。)

SELECT COUNT(*),COUNT(empno) FROM employee;

查询公司里有多少员工是由经理管理的、多少员工是有奖金的(COUNT(列)函数不对NULL值进行统计,所以统计结果mgr非空值有九行,comm非空值有3行)

SELECT COUNT(mgr),COUNT(comm)FROM employee;

AVG(列)函数和SUM(列)函数

前者是用于计算值为数字的列的平均值,后者是用于对值为数字的列求和。

例:求公司员工的平均工资和工资总和

SELECT AVG(sal)AS '平均工资第一种算法',SUM(sal)/COUNT(sal) '平均工资第二种算法', ROUND(AVG(sal),2) '平均工资保留两位小数',SUM(sal) '工资总和' FROM employee;

MAX(列)和MIN(列)函数

分别用于求此列中的最大值和最小值。MIN()和MAX()函数不但可用于数字型数据,而且还可以用于字符型数据(字母按照首字母由A~Z的顺序排列,越往后的越大。汉字,也先看拼音首字母,首字母相同,则比较下一个字母)和日期型数据(日期越早的值越小)。

例:查找公司中员工的最高工资和最低工资。

SELECT MAX(sal),MIN(sal) FROM employee;

例:查找员工入职时间的最小值(最早时间)和最大值(最晚时间)。

SELECT MIN(hiredate),MAX(hiredate) FROM employee;

GROUP BY子句的应用

分组函数是一次对一批数据进行操作,这批数据可能是整个表,也可能是按某种条件把该表分成的组。使用GROUP BY子句对表进行分组。

注意:

1.SELECT子句中只允许出现与GROUP BY子句中相同的分组字段和分组函数(使用了聚合函数的),也就是说不能再跟除了group by之后的列名之外的其他列名了,不然会出错(不会报错,但跟的其他列名下的数据是错误的)。

2.如果用了聚合函数,但不使用GROUP BY子句,则SELECT子句中不能出现任何其他字段(也就是列名),同样不报错,但数据会出错。

例:查询公司中按职位分类,每类员工的平均工资、最高工资和最低工资。

SELECT job, AVG(sal), MAX(sal),MIN(sal) FROM employee GROUP BY job;

GROUP BY子句还可以组成形式为"SELECT...FROM...WHERE...GROUP BY...ORDER BY...”的较为复杂的查询语句。

格式如下:

SELECT分组字段|分组函数FROM表

[WHERE条件]

[GROUP BY分组字段]

[ORDER BY排序字段ASC| DESC];

对应的此格式的SQL语句的执行顺序如下:

执行FROM子句,确定要检索的数据来源;

执行WHERE子句,使用限定条件对数据进行筛选;

执行GROUP BY子句,根据指定字段对筛选的数据分组;

执行SELECT子句,确定要查询的分组字段和分组函数;

执行ORDER BY子句,对查询的记录进行排序,默认为升序ASC,降序使用 DESC。

例:查询各个管理者手下员工的最低工资和最高工资,按照管理者编号由小到大排序,没有管理者的员工不计算在内。

SELECT mgr,MIN(sal),MAX(sal)FROM employee

WHERE mgr IS NOT NULL

GROUP BY mgr

ORDER BY mgr ASC;

注意:1.WHERE、GROUP BY、ORDER BY三者不是必须有的。三者之间顺序也不能颠倒。GROUP BY要在WHERE之后,ORDER BY之前。

2.WHERE语句用于数据分组前先对数据进行筛选。WHERE子句并不能对分组函数进行限定筛选。

HAVING子句的使用

分组后对组记录进行筛选使用HAVING子句

SELECT分组字段|分组函数FROM表

[WHERE条件]

[GROUP BY分组字段][HAVING过滤条件]

[ORDER BY排序字段ASC| DESC];

例:使用HAVING子句改进

SELECT mgr,MIN(sal),MAX(sal) FROM employee

WHERE mgr IS NOT NULL

GROUP BY mgr

HAVING MIN(sal)>=800

ORDER BY mgr ASC;

 

评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ice三分颜色

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值