聚合函数 [MySQL][数据库]

五大常用的聚合函数

聚合(分组)函数 :

是对一组数据进行汇总的函数,输入的是一组数据的集合,而输出的是单个值

  • 之前我们讲过的单行函数是对一行数据进行变换,每行返回一个结果
这里我们将对五个常用的聚合函数进行讲解,我们分为三个部分进行讲解
  1. AVG() 和 SUM()
    • AVG就是求平均值,SUM就是求和

这里我们通过举例的方式理解AVG()和SUM()的使用

eg1:

SELECT AVG(salary),SUM(salary)
FROM employees;
  • 这里就是计算员工表中的平均工资和总工资
  • 这个使用我们没有使用GROUP BY操作分组,那么这个时候默认将表中的所有数据分为了一个大组

eg2:

SELECT SUM(last_name),AVG(last_name),SUM(hire_date)
FROM employees;
  • 这里的这几个sum操作和avg操作都是无效的,因为sum和avg都不能对非数值的字段进行操作,而这里的last_name就是字符串类型的,hire_date是日期类型的
  • 如果是在Oracle中执行这个操作我们会发现会报错,也就是执行不了,因为在Oracle中就是直接不能使用sum和* avg操作非数值类型的字段,但是在MySQL中对于这种非数值的字段其实还是执行不了,比如对于字符串类型的字段我们执行了sum或者avg操作之后永远都会得到一个0,如果是日期类型的数值,我们会得到一串数值(可能是时间戳)
总结:AVG()和SUM()只使用与数值类型的字段(或者变量)
  1. MAX() 和 MIN()
    • MAX()就是求最大值,MIN是求最小值

这里我们通过举例来理解如何使用MAX和MIN

eg1:

SELECT MAX(salary),MIN(salary)
FROM employees;
  • 这个时候是求员工中的最大工资和最小工资

eg2:

SELECT MAX(last_name),MIN(last_name),MAX(hire_date)
FROM employees;
  • 前面我们说过了使用avg和sum是无法操作非数值类型的字段的,那么对于max和min可以操作非数值类型数据吗? — 我们执行之后可以发现我们可以得到返回的字符串类型的结果和date类型的结果,也就是说明: max和min都是可以对非数值类型的数据进行操作的
    • 其实我们可以想到,字符串类型和日期类型的数据都是可以比较大小的,只是不可以做求和运算,因为我们之前将ORDER BY(排序)的时候我们就讲过了,我们可以使用字符串类型的字段和日期类型的字段作为排序的依据,那么可以排序也即是说明字符串类型和日期类型的数据是可以比较大小的
总结:MAX()和MIN()使用于数值类型,字符串类型,日期时间类型的字段(或变量)
字符串和日期时间类型的数据不可以进行加法运算(求和运算),但可以比较大小
  1. COUNT()
    • 计算指定字段在查询结构中出现的个数

这里我们通过举例来说明COUNT()的使用

eg:

SELECT COUNT(employee_id),COUNT(commission_pct),COUNT(1),COUNT(*)
FROM employees;
  • 这个时候查询的COUNT(employee_id)为107,因为employees表中有107条记录,并且这107条记录的employee_id字段值都不为null
  • 而这个时候查询的COUNT(commission_pct)为100,因为这个时候表中有7条记录的commission_pct字段值为null,而我们这里讲述的这五个聚合函数执行中都是忽略null值的
  • 这里的COUNT(1)和COUNT(*)都为107
    • 我们查询表中记录数的时候通常就是查询COUNT(*)
这里我们引出一个问题: 如果要计算表中有多少条记录,我们如何实现?

方式一: COUNT(*)

方式二: COUNT(常数)

  • 前面两种方式都是一定可以求得表中的记录数

方式三: COUNT(具体字段)

  • 这个时候要求我们具体的字段在表中不能有null值
易错易混淆问题分析:

下面我们通过几个例子来分析:

SELECT AVG(commission_pct),SUM(commission_pct)/COUNT(commission_pct),SUM(commission_pct)/107
FROM employees;
  • 这个时候我们执行之后可以发现: avg(commission_pct)的值和sum(commission_pct)/count(commission_pct)的值是相同的,而avg(commission_pct)和sum(commission_pct)/107的值不同

    • 为什么会出现上面的这种情况?
    • 因为我们在执行这五种聚合函数操作的时候都是会忽略null值的,所以我们avg(commission_pct)求得的就是表中commission_pct字段值不为空的100条字段的commission_pct的平均值,对应的sum(commission_pct)/count(commission_pct)其实也就是等同于求得表中的commission_pct值为不为空的数据的平均值,而如果是sum(commission_pct)/107,那么就是求得的表中的所有的commission的平均值,包括commission_pct值为空的数据
  • 结论1:AVG(x) = SUM(x)/COUNT(x)
  • 结论2:这五大常用的聚合函数在执行时都会忽略null
通过上面的易错易混淆问题分析我们引出一个例题: 查询公司中的平均奖金率
SELECT AVG(commission_pct)
FROM employees;
  • 这种写法是错误的,这里查询出的其实是公司中有奖金率的员工的平均奖金率,而不是查询出了公司中所有员工的平均奖金率,因为公司中有的人的奖金率为null,也就是没有奖金率

后面这三种写法都是正确的,都可以计算出公司中的所有员工的平均奖金率

SELECT AVG(IFNULL(commission_pct,0))
FROM employees;
SELECT SUM(commission_pct)/COUNT(IFNULL(commission_pct,0)
FROM employees;

SELECT SUM(commission_pct)/COUNT(1)
FROM employees;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 数据库中可以使用聚合函数来对查询结果进行统计分析。常用的聚合函数包括:COUNT()、SUM()、AVG()、MIN()、MAX()。 例如,在一个订单表中,想要统计订单总数,可以使用如下语句: ``` SELECT COUNT(*) FROM orders; ``` 如果想要统计订单总额,可以使用如下语句: ``` SELECT SUM(amount) FROM orders; ``` 若想对某个字段求平均值,可以使用AVG函数,例如: ``` SELECT AVG(price) FROM products; ``` 更多详细用法可以参考MySQL 官方文档。 ### 回答2: MYSQL数据库中的聚合函数可以对数据进行汇总和计算。聚合函数一般用于统计或者分析数据,如查询总和、平均值、最大值、最小值、计数等。 聚合函数有很多种,常用的包括SUM、AVG、MAX、MIN和COUNT等。这些函数可以用于单个列或多个列,也可以与WHERE子句一起使用,从而实现更精确的数据查询和分析。 例如,假设我们有一个名为Students的表,其中包含学生的姓名、性别、年龄和成绩等信息。我们可以使用聚合函数来查询这些学生平均年龄和成绩的总和。 查询平均年龄: SELECT AVG(age) FROM Students; 查询成绩总和: SELECT SUM(score) FROM Students; 我们还可以将聚合函数与GROUP BY子句一起使用,以对每个组进行聚合,进一步分析和统计数据。例如,我们可以按性别分组并计算每个性别的平均年龄和成绩总和。 按性别分组查询平均年龄和成绩总和: SELECT gender, AVG(age), SUM(score) FROM Students GROUP BY gender; 聚合函数在数据分析和统计方面非常有用。通过熟练掌握这些函数的使用方法,我们可以更好地理解和分析数据,以便做出更有意义的决策。 ### 回答3: MySQL数据库是一种现代的关系型数据库管理系统,常用于Web应用程序开发中存储和管理数据。在MySQL中,聚合函数可以帮助我们对数据进行统计和分析。聚合函数可以对数据库中的数据进行处理,并返回聚合数据的结果。 MySQL中常用的聚合函数包括AVG()、SUM()、COUNT()、MAX()和MIN()。这些函数可以用于单个列或多个列,以及一些特定条件和限制。 AVG()函数用于计算一个列中所有值的平均值,例如: SELECT AVG(column_name) FROM table_name; SUM()函数用于计算一个列中所有值的总和,例如: SELECT SUM(column_name) FROM table_name; COUNT()函数用于计算一个列中值的数目,例如: SELECT COUNT(column_name) FROM table_name; MAX()函数用于计算一个列中最大值,例如: SELECT MAX(column_name) FROM table_name; MIN()函数用于计算一个列中最小值,例如: SELECT MIN(column_name) FROM table_name; 在MySQL中,你可以在一个查询语句中使用多个聚合函数,并使用GROUP BY子句对结果进行分组。GROUP BY子句通常配合聚合函数使用,可对结果集按照一个或多个列进行分组。例如: SELECT column_name1, COUNT(column_name2), MAX(column_name3) FROM table_name GROUP BY column_name1; 此查询将根据column_name1对表table_name进行分组,并显示每组的计数和最大值。 总之,聚合函数MySQL数据库中的一个强大工具,它可以帮助开发人员实现高效的数据统计和分析,以更好地理解和使用数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值