MySQL8_基础_聚合函数

聚合函数

1. 聚合函数介绍

  • 什么是聚合函数
    聚合函数作用于一组数据,并对一组数据返回一个值。
    在这里插入图片描述

  • 聚合函数类型

    • AVG()
    • SUM()
    • MAX()
    • MIN()
    • COUNT()
  • 聚合函数语法
    在这里插入图片描述

  • 聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。

1.1 AVG和SUM函数

可以 对数值型数据 使用AVG 和 SUM 函数。

#AVG / SUM :只适用于数值类型的字段(或变量)
SELECT AVG(salary),SUM(salary),AVG(salary) * 107
FROM employees;

在这里插入图片描述

#如下的操作没有意义
SELECT SUM(last_name),AVG(last_name),SUM(hire_date)
FROM employees;

在这里插入图片描述

1.2 MIN和MAX函数

可以对 任意数据类型 的数据使用 MIN 和 MAX 函数。

#MAX / MIN :适用于数值类型、字符串类型、日期时间类型的字段(或变量)
SELECT MAX(salary),MIN(salary)
FROM employees;

在这里插入图片描述

#只要的排序的字段都能比较大小。
SELECT MAX(last_name),MIN(last_name),MAX(hire_date),MIN(hire_date)
FROM employees;

在这里插入图片描述

1.3 COUNT函数

  • COUNT(*)返回表中记录总数,适用于 任意数据类型
#作用:计算指定字段在查询结构中出现的个数(不包含NULL值的)
SELECT COUNT(employee_id),COUNT(salary),COUNT(2 * salary),COUNT(1),COUNT(2),COUNT(*)
FROM employees;

在这里插入图片描述

  • COUNT(expr) 返回 expr不为空 的记录总数。
SELECT COUNT(commission_pct),COUNT(salary)
FROM employees;

在这里插入图片描述

#如果计算表中有多少条记录,如何实现?
#方式1:COUNT(*)
#方式2:COUNT(1)
#方式3:COUNT(具体字段) : 不一定对!(该列可能会有空值)
SELECT COUNT(*),COUNT(1),COUNT(commission_pct) 
FROM employees;

在这里插入图片描述

  • 问题:用count(*),count(1),count(列名)谁好呢?
    其实,对于MyISAM引擎的表是没有区别的。这种引擎内部有一计数器在维护着行数。Innodb引擎的表用count(*),count(1)直接读行数,复杂度是O(n),因为innodb真的要去数一遍。但好于具体的count(列名)。
如何需要统计表中的记录数,使用COUNT(*)、COUNT(1)、COUNT(具体字段) 哪个效率更高呢?
如果使用的是MyISAM 存储引擎,则三者效率相同,都是O(1)
如果使用的是InnoDB 存储引擎,则三者效率:COUNT(*) = COUNT(1)> COUNT(字段)
  • 问题:能不能使用count(列名)替换count(*)?
    不要使用 count(列名)来替代 count(*)count(*) 是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
    说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。

公式:AVG = SUM / COUNT

#公式:AVG = SUM / COUNT
SELECT AVG(salary),SUM(salary) / COUNT(salary),
       AVG(commission_pct),SUM(commission_pct) / COUNT(commission_pct),
       SUM(commission_pct) / 107 
FROM employees;

在这里插入图片描述

题目:查询公司中平均奖金率

#错误的!
SELECT 
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值