我们都知道,数据库是一个存储数据的容器,查询相当于从这个容器中取出数据,一般而言,直接取出的数据很多时候不能满足我们的需求,在上一篇内容中,我们介绍了对字符串、数值以及日期的常用操作。但是,对于更复杂一些的问题,比如,计算当月每个部门的工资和、找出每个部门的最高工资、计算每个部门的平均工资等,这些问题并不能通过简单的加减乘除得以解决,这时候,我们需要引用SQL中的聚集函数。
聚集函数是指运行在行组上,计算和返回单个值的函数。在上面提出的业务场景中,我们都只是需要对表中的数据进行汇总,而不需要对表中的实际数据进行操作,如果把表中所有的数据都查询出来,然后筛选我们需要的值,无疑是对资源的一种浪费,所以,MySQL
为我们提供了5个聚集函数,来满足我们的实际需求。
在开始之前,可以创建下面的表,并插入数据,以便练习。
CREATE TABLE emp
(
emp_id int NOT NULL AUTO_INCREMENT,
emp_name char(50) NOT NULL ,
emp_address char(50) NULL ,
emp_state char(5) NULL ,
emp_sex char(1) not null,
dept_id char(2) not NULL ,
emp_salary decimal(8,2) NOT NULL ,
emp_birth datetime NOT NULL,
PRIMARY KEY (emp_id)
)
insert into emp values(2,'关羽','解州','在职','1','01','7000','1993-03-03');
insert into emp values(3,'曹操','许昌','在职','1','02','60000','1985-03-03');
insert into emp values(4,'周瑜','吴州','在职','1','03','8000','1991-03-03');
insert into emp values(5,'诸葛亮','隆中','在职','1','01','9000','1997-03-03');
insert into emp values(6,'孙权','江州','在职','1','03','20000','1995-08-03');
insert into emp values(1,'张飞','燕州','在职','1','01','6000','1995-03-03');
1.AVG()函数:AVG()函数可以返回返回所有列的平均值,也可以返回特定列或行的平均值。
(1)查询emp表中所有员工的平均工资(emp_salary)
select AVG(emp_salary) from emp
(2)除了可以查询表中所有字段的平均值,也可以查询特定列或行的平均值。
例如:查询emp表中部门主键(dept_id)值为01的所有员工的平均工资
select AVG(emp_salary) from emp where dept_id = '01'
MySQL执行顺序:通过where子句过滤出dept_id为01的员工,然后通过AVG()函数计算出工资的平均值。
需要注意的是,AVG()函数会忽略值为NULL的值。
2.COUNT()函数:COUNT()函数进行计数。可以利用COUNT()函数确定表中行的数目或符合特定条件的行的数目。
(1)根据emp表求出员工总数
select COUNT(*) from emp;
(2)计算部门编码(dept_id)为01的员工总数量
select COUNT(*) from emp where dept_id = '01';
3.MAX()函数:MAX()函数可以返回指定列中最大的值,要求制定列名
(1)例如:我们需要返回员工工资最高的数字(emp_salary)
select MAX(emp_salary) from emp
(2)我们需要统计部门(dept_id)值为01的最高工资
select MAX(emp_salary) from emp where dept_id = '01'
4.MIN()函数:MIN()函数可以返回指定列的最小值
(1)例如:我们需要返回员工工资最低的数字(emp_salary)
select MIN(emp_salary) from emp
需要注意的是:MySQL允许MAX()和MIN()函数用于所有的列,包括非数值列。
(2)我们需要统计部门(dept_id)值为01的最低工资
select MIN(emp_salary) from emp where dept_id = '01'
5.SUM()函数:SUM()函数用来返回指定列值的和
(1)例如:我们需要返回所有员工的工资和
select sum(emp_salary) from emp
(2)例如:我们需要返回部门编码(dept_id)为01的员工工资和
select sum(emp_salary) from emp where dept_id = '01'
需要注意的是,如果为NULL值,SUM()函数会忽略对应的值。
6.组合聚集函数:上面给出的案例中,都只涉及单个聚集函数的使用,实际上,可以包含多个聚集函数。
(1)例如,我们需要了解员工工资最高值,最低值,平均值,以及工资总和。
select MAX(emp_salary) as max_salary,MIN(emp_salary) as min_salary,AVG(emp_salary) as avg_salary,SUM(emp_salary) as sum_salary from emp;
这一篇内容就是这些了,介绍了聚集函数的简单应用。喜欢的小伙伴们麻烦点关注、点赞留评论呀。