MySQL数据库——聚合函数

本文详细介绍了MySQL中常用的聚合函数,如AVG、SUM、MAX、MIN和COUNT,并探讨了它们的适用场景和注意事项。同时,文章还讨论了GROUP BY和HAVING子句的使用,以及SQL执行原理的基础知识,对于理解SQL查询的执行流程有所帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常见的几个聚合函数

  • AVG:计算平均值
  • SUM:求和
  • MAX:求最大值
  • MIN:求最小值
  • COUNT:计数
# 求员工工资的平均值、总和、最大值、最小值以及员工人数
SELECT AVG(salary),SUM(salary),MAX(salary),MIN(salary),COUNT(last_name)
FROM employees;
  • 注意事项
    • 1、avg、sum用于数值型
      • avg =sum / count
    • 2、max、min可用于数值型、字符型、日期时间类型
    • 3、count 可用于数值型、字符型(只要不是null,都会计算)
      • 统计表中的记录数:可使用count(*)、count(1)、count(具体字段)
      • 若使用MyISAM存储引擎,上述三种效率相同;若使用InnoDB存储引擎,则count(*) = count(1) > count(具体字段)

二、GROUP BY的使用

  • 注意 “ 各个 ” 后面的字段
# 需求:查询各个department_id,job_id的平均工资
SELECT department_id,job_id,AVG(salary)
FROM employees
GROUP BY job_id,department_id;
  • group by 后面的字段可交换次序
  • select中出现的非组函数的字段必须声明在 group by 中;反之,group by中声明的字段可以不出现在select中。
  • group by 的位置:在where后面,order by前面
  • 新特性:with rollup 计算整体的特征(在和order by一起的时候,慎用)
# 计算公司整体以及各个部门的平均工资
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id WITH ROLLUP;

三、HAVING的使用

  • 要求1:过滤条件中使用了聚合函数,则必须使用having来替换where
  • 要求2:having必须声明在group by的后面
# 需求:查询各个部门工资中最高工资比10000高的部门信息
SELECT MAX(salary) AS '最高工资',department_id
FROM employees
GROUP BY department_id
HAVING 最高工资 > 10000;
  • 当过滤条件中有聚合函数时,则此过滤条件必须声明在having中
  • 当过滤条件中无聚合函数时,则此过滤条件声明放到where中
  • where 和 having 对比
    • 1、having适用范围更广
    • 2、如果过滤条件中无聚合函数,where效率高于having

四、SQL底层的执行原理

4.1 SELECT语句的完整结构

select 字段名
from 表名 (left/right)join 表名 on 连接条件
where 筛选条件
group by 字段名
having 包含聚合函数的筛选条件
order by 字段名 asc/desc
limit (pageNum-1)*pageSize,pageSize;

4.2 语句的执行过程

from......on......(left/right join)
where
group by
having
select...... distinct
order by
limit

参考:尚硅谷-宋红康老师的视频及课件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值