数据库回顾(四) 聚合函数概述

198 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

大家好! 我是慕歌,一只想教你学习 后端技术的野生coder! 欢迎来到慕歌的数据库系列教程,希望通过这个教程带大家深入学习数据库技术,该教程所有知识点均来源于本人的日常学习与开发中,如有疑问请与我联系!

前言

在前一节的分享中,慕歌主要向大家分享关于MYSQL 单行函数的知识。其中的数值函数,日期函数,字符函数等,都是在开发过程中,使用次数非常频繁的函数,在使用这些函数的过程中需要注意对参数的选择,避免出现系统性问题。当然除了使用系统函数外,也可之间获取数据,将处理的过程交由业务层进行运算约束,避免出现多重的bug无法排查。很多我们觉得数据库阶段难以处理,或者容易出现系统bug 的数据处理,可以通过业务层进行约束规范。
当然MYSQL除了提供单行函数外还有丰富的聚合处理函数,那么这一节慕歌将带来聚合函数的知分享。

聚合函数

聚合函数:

很多时候需要我们对整张表的数据进行处理筛选,不同于单行函数对几个具体参数的处理,聚合函数通过特殊的运算对全表,或者多表的数据进行整合分析。

#集合运算
# AVG() 平均值 / SUM() 求和
SELECT AVG(col_name) FROM tab_name;
#求一列数据的平均值或是总和

#比较运算
# MIN() 最小值/ MAX() 最大值
SELECT MIN(col_name) FROM table_name;
#寻找该列数据的最值(数值运算)

#示例: 
#获取工资的总和,工资的总和,条件为:员工id 包含REP
SELECT AVG(salary), SUM(salary)
FROM   employees
WHERE  job_id LIKE '%REP%';

#获取出生日期最早和最晚的时间
SELECT MIN(hire_date), MAX(hire_date)
FROM	  employees;

示例中用到的数据表来源于:,大家也可以看看这篇文章,非常值得学习的多表查询。

#统计函数
# COUNT() 计数
SELECT COUNT(*),COUNT(1),COUNT(col_name) FROM tab_name;
#COUNT(*) ,COUNT(1) 都是表示统计表中的数据条数
#COUNT(col_name) 统计某一列数据的个数

示例:
#统计员工表中部门id 为50 的人数
SELECT COUNT(*)
FROM	  employees
WHERE  department_id = 50;

这里需要注意的点为:

  • COUNT(*) 在不同的数据引擎中的查询速度是不同的
  • INNODB 引擎的数据需要通过遍历获取
  • MYISM 引擎维护每个数据表中 的数据长度
  • COUNT(col_name) 需要注意空值列,空值不会被统计

分组函数

分组函数主要是对具有相同数据列的数据的处理,将具有相同数据列的数据放在一起,进行分析。

#分组函数
# GROUP BY(col_name) 对某个列,或某几个列的数据进行分组

#使用语法
SELECT column, fun(column)
FROM tab_name
[WHERE	condition]
[GROUP BY	group_by_expression]
[ORDER BY	column];

#统计分组个数
SELECT column, fun(column)
FROM tab_name
[WHERE	condition]
[GROUP BY	group_by_expression]
WITH ROLLUP;

#示例:
#获取部门id,并根据通过dept_id 和 job_id 分组
SELECT   department_id dept_id, job_id, SUM(salary)
FROM     employees
GROUP BY department_id, job_id ;

注意:分组统计与分组排序冲突,两个后置规则只能选择一个。

筛选函数

这里的筛选函数不同于之前的where 筛选,having 筛选主要针对分组的筛选

#分组筛选
#HAVING 筛选分组中需要展现的数据

#使用语法
SELECT column, fun(column)
FROM tab_name
[WHERE	condition]
[GROUP BY	group_by_expression]
[HAVING group_condition]
[ORDER BY	column];

#示例:
#获取员工表中员工编号,最高的工资,根据部门进行分组,最高工资不低于10000
SELECT   department_id, MAX(salary)
FROM     employees
GROUP BY department_id
HAVING   MAX(salary)>10000 ;

注意:

  • 聚合函数不可在where 中使用
  • having 不可单独使用

结语

这一节的分享到这里就结束了,下一节中将带来子查询的分享学习,子查询将是数据库语句中最复杂的语句,具有极高的灵活性!
如果您觉得本文不错,欢迎点赞支持,您的关注是我坚持的动力!