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

 更新时间:2022年07月27日 09:12:41   作者:不渴望力量的哈士奇  
这篇文章主要为大家详细介绍一下MySQL中聚合函数的使用,文中的示例代码讲解详细,对我们学习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_emp
WHERE deptno IN (10, 20)

SQL 语句演示 SUM函数 案例(统计 ename(字段) 的综合 )

SELECT SUM(ename)
FROM t_emp
WHERE 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_sal
FROM t_emp
WHERE deptno IN (10, 20)

-- MAX:聚合函数,求最大值使用
-- IFNULL:IFNULL 函数的语法,当第一个参数的值为null 的时候,则返回第二个参数的值

SQL 语句演示 MAX函数 案例(查询 员工姓名 最长的名字的长度)

SELECT MAX(LENGTH(ename)) AS length_ename
FROM t_emp;

-- LENGTH:LENGTH函数可以统计字符的个数计算其长度

MIN 函数

与MAX 函数对应的是 MIN 函数,用于获得非空值的最小值。

SQL语句演示 MIN函数 案例(查询 员工编号最小 的员工)

SELECT MIN(empno) AS min_empno
FROM t_emp;

SQL语句演示 MIN函数 案例(查询 最早入职 的员工)

SELECT MIN(hiredate) AS min_hiredate
FROM 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_emp
WHERE deptno IN (10, 20)
AND sal >= 2000
AND DATEDIFF(NOW(),hiredate)/365 >= 15;

聚合函数综合练习 -2

SQL 案例2 - 语句演示:(查询 1985年之后入职的员工,并且底薪超过公司平均底薪的员工的数量)

SELECT COUNT(*) 
FROM t_emp
WHERE 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聚合函数的资料请关注脚本之家其它相关文章!

相关文章

  • 解决MySQL无法远程连接的方法

    解决MySQL无法远程连接的方法

    这篇文章主要介绍了解决MySQL无法远程连接的方法,文中给出的解决方案主要针对IP限制时出现的该种情况,需要的朋友可以参考下
    2015-04-04
  • MYSQL数据库主从同步设置的实现步骤

    MYSQL数据库主从同步设置的实现步骤

    本文主要介绍了MYSQL数据库主从同步设置的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • mysql 存储过程判断重复的不插入数据

    mysql 存储过程判断重复的不插入数据

    这篇文章主要介绍了下面是一个较常见的场景,判断表中某列是否存在某值,如果存在执行某操作,需要的朋友可以参考下
    2017-01-01
  • vs如何读取mysql中的数据并解决中文乱码问题

    vs如何读取mysql中的数据并解决中文乱码问题

    这篇文章主要介绍了vs如何读取mysql中的数据并解决中文乱码问题,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • MySQL分表和分区的具体实现方法

    MySQL分表和分区的具体实现方法

    这篇文章主要介绍了MySQL分表和分区的具体实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06
  • sql获得当前时间以及SQL比较时间大小详解

    sql获得当前时间以及SQL比较时间大小详解

    最近写项目的时候功能需要在sql语句中获取当前时间,所以下面这篇文章主要给大家介绍了关于sql获得当前时间以及SQL比较时间大小的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • MySQL5.6.22 绿色版 安装详细教程(图解)

    MySQL5.6.22 绿色版 安装详细教程(图解)

    本文通过图文并茂的形式给大家介绍了MySQL5.6.22 绿色版 安装详细教程,非常不错,具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • MySQL如何统计一个数据库所有表的数据量

    MySQL如何统计一个数据库所有表的数据量

    最近在做统计想查找一个数据库里基本所有的表数据量,下面这篇文章主要给大家介绍了关于MySQL如何统计一个数据库所有表的数据量的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • mysql的中文数据按拼音排序的2个方法

    mysql的中文数据按拼音排序的2个方法

    这篇文章主要介绍了mysql的中文数据按拼音排序的2个方法,用于一些特殊环境,需要的朋友可以参考下
    2014-06-06
  • 低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限

    低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限

    应用升级MySQL驱动8.0后,在并发量较高时,查看监控打点,Druid连接池拿到连接并执行SQL的时间大部分都超过200ms,本文就解决一下这个问题
    2021-07-07

最新评论