深入了解MySQL中聚合函数的使用

今天的章节我们将要来学习一下 “聚合函数” ;首先我们需要学习聚合函数对数据进行统计分析 , 比如说求最大值、最小值、平均值之类的场景 。但是单纯的使用聚合函数 , 只能做全表范围的统计分析 。如果想要把记录分组分别统计 , 需要使用 “group by” 和 “having” 这样的分组子句了 。关于分组查询的应用 , 将在下一章节为大家进行讲解 。当前章节我们还是学习一下 “聚合函数” 的基本使用 。
什么是聚合函数 聚合函数是用来做简单的数据统计的 , 比如说统计一下 “员工表” 中的平均工龄是多少年啊 , 员工表中一共有多少条记录等等… 这些都需要使用到聚合函数 。
聚合函数也被称为 “汇总函数”  , 在数据的查询分析中 , 应用的十分广泛 。可以帮助我们实现对数据的求和、求最大值、求最小值、求平均值等等 。
如果不指定统计的范围 , 那么聚合函数统计的范围就是整张数据表 , 该章节我们所讲解的 “聚合函数” 就是针对整张数据表范围的 。
聚合函数演示案例:(求员工表中的平均月收入是多少?)
select avg(sal + ifnull(comm,0)) as 平均工资from t_emp;-- avg:聚合函数 , 求平均值使用-- ifnull:ifnull 函数的语法 , 当第一个参数的值为null 的时候 , 则返回第二个参数的值
ps:需要注意的地方 , 在聚合函数的返回结果集(无论是求和、最大值、最小值、还是求平均数) , 结果集只有一个返回数据 。
sum 函数 sun 函数用于求和 , 只能用于数字类型;如果用于字符类型的数据 , 则统计结果为0;如果用于时间类型的数据的求和 , 则结果是毫秒数的相加 。
sql 语句演示 sum函数 案例(统计 10、20 部门的员工的月薪的总和)
select sum(sal)from t_empwhere deptno in (10, 20)
sql 语句演示 sum函数 案例(统计 ename(字段) 的综合 )
【深入了解MySQL中聚合函数的使用】select sum(ename)from t_empwhere deptno in (10, 20)
max 函数 max 函数用于获取非空值的最大值 。
select max(comm) from t_emp;-- 比如这种想要获取 "comm" 字段的非空的最大值 , 直接套一个 max() 函数即可 。sql 语句演示 max函数 案例(查询 10、20 部门的月收入最高的员工)
select max(sal + ifnull(comm,0)) as max_salfrom t_empwhere deptno in (10, 20)-- max:聚合函数 , 求最大值使用-- ifnull:ifnull 函数的语法 , 当第一个参数的值为null 的时候 , 则返回第二个参数的值
sql 语句演示 max函数 案例(查询 员工姓名 最长的名字的长度)
select max(length(ename)) as length_enamefrom t_emp;-- length:length函数可以统计字符的个数计算其长度
min 函数 与max 函数对应的是 min 函数 , 用于获得非空值的最小值 。
sql语句演示 min函数 案例(查询 员工编号最小 的员工)
select min(empno) as min_empnofrom t_emp;
sql语句演示 min函数 案例(查询 最早入职 的员工)
select min(hiredate) as min_hiredatefrom t_emp;
avg 函数 在上文我们已经演示过了 avg 函数的使用方法 , avg 函数是用于获得非空值的平均值;如果用于非数字数据的统计 , 输出结果为 0。
聚合函数演示案例:(求员工表中的平均月收入是多少?)
select avg(sal + ifnull(comm,0)) as 平均工资from t_emp;-- avg:聚合函数 , 求平均值使用-- ifnull:ifnull 函数的语法 , 当第一个参数的值为null 的时候 , 则返回第二个参数的值
count 函数 count 函数用于获得记录的数量 , count 函数有两种用法 。
第一种:在 count() 函数的 括号内 , 输入一个 “*” 即可 , 记录下包含空值的查询记录的数量 。示例:count(*)
第二种:在 count() 函数的 括号内 , 输入要统计的列名即可 , 记录下包含非空值的查询的记录的数量 。示例:count(列名)
sql语句演示 count(*) 案例
select count(*) from t_emp;
sql语句演示 count(列名) 案例
select count(comm) from t_emp;
聚合函数综合小练习
聚合函数综合练习 -1 sql 案例1 - 语句演示:(查询 10、20部门中 , 底薪超过 2000 并且工龄超过 15年 的员工人数)
select count(*) from t_empwhere deptno in (10, 20)and sal >= 2000and datediff(now(),hiredate)/365 >= 15;

聚合函数综合练习 -2 sql 案例2 - 语句演示:(查询 1985年之后入职的员工 , 并且底薪超过公司平均底薪的员工的数量)
select count(*) from t_empwhere hiredate >= "1985-01-01"and sal >= avg(sal)ps:表面上看这个 sql 是正常的 , 但是这个 sql 语是无法得出想要的结果的 , 因为语法上有错误 。where 子句中出现了聚合函数 , 这一点大家一定要注意 , 聚合函数 一定不能出现在 where 子句中 。
ps:where 子句中不能出现 聚合函数 的根本原因还要从 子句的执行顺序来说起 。sql语句的执行过程是:from-->where-->group by -->having --- >order by --> select;
ps:聚合函数是针对结果集进行的 , 但是where条件并不是在查询出结果集之后运行 , 所以主函数放在where语句中 , 会出现错误 。
ps:关于如何解决这个问题 , 将在下一章节的 "分组查询的应用" 进行详细的讲解 。
以上就是深入了解mysql中聚合函数的使用的详细内容 , 更多关于mysql聚合函数的资料请关注www.887551.com其它相关文章!

    推荐阅读