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

目录
  • 什么是聚合函数
    • SUM 函数
    • MAX 函数
    • MIN 函数
    • AVG 函数
    • COUNT 函数
  • 聚合函数综合小练习
    • 聚合函数综合练习 -1
    • 聚合函数综合练习 -2

今天的章节我们将要来学习一下 “聚合函数” ;首先我们需要学习聚合函数对数据进行统计分析,比如说求最大值、最小值、平均值之类的场景。但是单纯的使用聚合函数,只能做全表范围的统计分析。如果想要把记录分组分别统计,需要使用 “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聚合函数的资料请关注我们其它相关文章!

(0)

相关推荐

  • MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回指定列的最大值 四.SUM SUM(col) 返回指定列的所有值之和 五.GROUP_CONCAT GROUP_CONCAT([DISTINCT] expr [,expr ...]              [ORDER BY {unsigned_integer | col_name | expr}

  • MySql 中聚合函数增加条件表达式的方法

    Mysql 与聚合函数在一起时候where条件和having条件的过滤时机 where 在聚合之前过滤 当一个查询包含了聚合函数及where条件,像这样的情况 select max(cid) from t where t.id<999 这时候会先进行过滤,然后再聚合.先过滤出ID<999的记录,再查找最大的cid返回. having 在聚合之后过滤 having在分组的时候会使用,对分组结果进行过滤,通常里面包含聚合函数. SELECT ip,MAX(id) FROM app GROUP BY

  • MySQL 聚合函数排序

    目录 MySQL 结果排序-- 聚集函数 环境 查询结果排序 查询的分组与汇总 查一下 学生们平均年龄 查一下总人数是多少 查一下每个年龄有多少人 查出最大年龄 总结 MySQL 结果排序-- 聚集函数 环境 CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号', `student_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_c

  • MySQL必备基础之分组函数 聚合函数 分组查询详解

    目录 一.简单使用 二.搭配DISTINCT去重 三.COUNT()详细介绍 四.分组查询 一.简单使用 SUM:求和(一般用于处理数值型) AVG:平均(一般用于处理数值型) MAX:最大(也可以用于处理字符串和日期) MIN:最小(也可以用于处理字符串和日期) COUNT:数量(统计非空值的数据个数) 以上分组函数都忽略空NULL值的数据 SELECT SUM(salary) AS 和,AVG(salary) AS 平均,MAX(salary) AS 最大,MIN(salary) AS 最小

  • MySQL查询排序与查询聚合函数用法分析

    本文实例讲述了MySQL查询排序与查询聚合函数用法.分享给大家供大家参考,具体如下: 排序 为了方便查看数据,可以对数据进行排序 语法: select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...] 说明 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推 默认按照列值从小到大排列(asc) asc从小到大排列,即升序 desc从大到小排序,即降序 例1:查询未删除男生信息,按学号降序 select * from st

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

    目录 什么是聚合函数 SUM 函数 MAX 函数 MIN 函数 AVG 函数 COUNT 函数 聚合函数综合小练习 聚合函数综合练习 -1 聚合函数综合练习 -2 今天的章节我们将要来学习一下 “聚合函数” :首先我们需要学习聚合函数对数据进行统计分析,比如说求最大值.最小值.平均值之类的场景.但是单纯的使用聚合函数,只能做全表范围的统计分析.如果想要把记录分组分别统计,需要使用 “GROUP BY” 和 “HAVING” 这样的分组子句了.关于分组查询的应用,将在下一章节为大家进行讲解.当前章

  • MySQL中聚合函数count的使用和性能优化技巧

    本文的环境是Windows 10,MySQL版本是5.7.12-log 一. 基本使用 count的基本作用是有两个: 统计某个列的数据的数量: 统计结果集的行数: 用来获取满足条件的数据的数量.但是其中有一些与使用中印象不同的情况,比如当count作用一列.多列.以及使用*来表达整行产生的效果是不同的. 示例表如下: CREATE TABLE `NewTable` ( `id` int(11) NULL DEFAULT NULL , `name` varchar(30) NULL DEFAUL

  • 详解 MySQL中count函数的正确使用方法

    1. 描述 在MySQL中,当我们需要获取某张表中的总行数时,一般会选择使用下面的语句 select count(*) from table; 其实count函数中除了*还可以放其他参数,比如常数.主键id.字段,那么它们有什么区别?各自效率如何?我们应该使用哪种方式来获取表的行数呢? 当搞清楚count函数的运行原理后,相信上面几个问题的答案就会了然于胸. 2. 表结构 为了解决上述的问题,我创建了一张 user 表,它有两个字段:主键id和name,后者可以为null,建表语句如下. CRE

  • 详解MySQL中concat函数的用法(连接字符串)

    MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串. 一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQ

  • MySQL中group_concat函数深入理解

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 |

  • 浅谈MySQL中group_concat()函数的排序方法

    group_concat()函数的参数是可以直接使用order by排序的.666.. 下面通过例子来说明,首先看下面的t1表. 比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高到底排序. 可以这样写: SELECT username,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM t1 GROUP BY username; 效果如下: 以上这篇浅谈MySQL中group_concat()函数的排序方法就

  • 浅谈mysql中concat函数,mysql在字段前/后增加字符串

    MySQL中concat函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串. 一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) MySQ

  • mysql中find_in_set()函数的使用及in()用法详解

    MySQL手册中find_in_set函数的语法解释: FIND_IN_SET(str,strlist) str 要查询的字符串 strlist 字段名 参数以","分隔 如 (1,2,6,8,10,22) 查询字段(strlist)中包含(str)的结果,返回结果为null或记录 假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间. 一个字符串列表就是一个由一些被 ',' 符号分开的子链组成的字符串.如果第一个参数是一个常数字符串,而第

随机推荐