前言

聚合函数在工作中大量使用,比如常用的 sum求和函数,avg求平均值的函数等,本篇将mysql聚合函数相关的知识点做一些完整的总结;

数据准备

提前创建一张部门表和员工表,并插入若干数据

CREATE TABLE `employees` (`employee_id` int(6) NOT NULL DEFAULT '0',`first_name` varchar(20) DEFAULT NULL,`last_name` varchar(25) NOT NULL,`email` varchar(25) NOT NULL,`phone_number` varchar(20) DEFAULT NULL,`hire_date` date NOT NULL,`job_id` varchar(10) NOT NULL,`salary` double(8,2) DEFAULT NULL,`commission_pct` double(2,2) DEFAULT NULL,`manager_id` int(6) DEFAULT NULL,`department_id` int(4) DEFAULT NULL,PRIMARY KEY (`employee_id`),UNIQUE KEY `emp_email_uk` (`email`),UNIQUE KEY `emp_emp_id_pk` (`employee_id`),KEY `emp_dept_fk` (`department_id`),KEY `emp_job_fk` (`job_id`),KEY `emp_manager_fk` (`manager_id`),CONSTRAINT `emp_dept_fk` FOREIGN KEY (`department_id`) REFERENCES `departments` (`department_id`),CONSTRAINT `emp_job_fk` FOREIGN KEY (`job_id`) REFERENCES `jobs` (`job_id`),CONSTRAINT `emp_manager_fk` FOREIGN KEY (`manager_id`) REFERENCES `employees` (`employee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `departments` (`department_id` int(4) NOT NULL DEFAULT '0',`department_name` varchar(30) NOT NULL,`manager_id` int(6) DEFAULT NULL,`location_id` int(4) DEFAULT NULL,PRIMARY KEY (`department_id`),UNIQUE KEY `dept_id_pk` (`department_id`),KEY `dept_loc_fk` (`location_id`),KEY `dept_mgr_fk` (`manager_id`),CONSTRAINT `dept_loc_fk` FOREIGN KEY (`location_id`) REFERENCES `locations` (`location_id`),CONSTRAINT `dept_mgr_fk` FOREIGN KEY (`manager_id`) REFERENCES `employees` (`employee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


聚合函数介绍

聚合函数作用于一组数据,并对一组数据返回一个值

常用聚合函数类型

  • AVG(),SUM(),MAX(),MIN(),COUNT();

聚合函数语法

1.1 AVG和SUM函数

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

SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE '%REP%';

1.2 MIN和MAX函数

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

SELECT MIN(hire_date), MAX(hire_date) FROM employees;

1.3 COUNT函数

COUNT(*)返回表中记录总数,适用于任意数据类型

SELECT COUNT(*) FROM employees WHERE department_id = 50;

COUNT(expr) 返回expr不为空的记录总数

SELECT COUNT(commission_pct) FROM employees WHERE department_id = 50;

问题1:用count(*),count(1),count(列名)谁好呢?

其实,对于MyISAM引擎的表是没有区别的。这种引擎内部有一计数器在维护着行数。
Innodb引擎的表用count(*),count(1)直接读行数,复杂度是O(n),因为innodb真的要去数一遍。但好于具体的count(列名)。

问题2:能不能使用count(列名)替换count(*) ?

不要使用 count(列名)来替代 count() , count() 是 SQL92 定义的标准统计行数的语法,跟数
据库无关,跟 NULL 和非 NULL 无关。

说明:count()会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。*

基本使用

可以使用GROUP BY子句将表中的数据分成若干组【WHERE一定放在FROM后面】

SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY group_by_expression] [ORDER BY column];

在SELECT列表中所有未包含在组函数中的列都应该包含在 GROUP BY子句中

SELECT department_id, AVG(salary) FROM employees GROUP BY department_id ;

包含在 GROUP BY 子句中的列不必包含在SELECT 列表中

使用多个列分组

SELECT department_id dept_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id ;


使用 WITH ROLLUP 关键字之后,在所有查询出的分组记录之后增加一条记录,该记录计算查询出的所有记录的总和,即统计记录数量;

SELECT department_id,AVG(salary) FROM employees WHERE department_id > 80 GROUP BY department_id WITH ROLLUP;

注意:
当使用ROLLUP时,不能同时使用ORDER BY子句进行结果排序,即ROLLUP和ORDER BY是互相排斥的。

HAVING 使用

过滤分组:HAVING子句

  • 行已经被分组;
  • 使用了聚合函数;
  • 满足HAVING 子句中条件的分组将被显示;
  • HAVING 不能单独使用,必须要跟 GROUP BY 一起使用;

SELECT department_id, MAX(salary) FROM employees GROUP BY department_id HAVING MAX(salary)>10000 ;

非法使用聚合函数 : 不能在 WHERE 子句中使用聚合函数。如下:

SELECT department_id, AVG(salary) FROM employees WHERE AVG(salary) > 8000 GROUP BY department_id;

mysql 常用聚合函数总结相关推荐

  1. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  2. mysql的所有聚合函数_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  3. 【MySQL】聚合函数

    一.五大常用聚合函数 SUM():求总和,只适用于数值类型字段,如果是字符串类型不会报错会返回0,会自动过滤空值 AVG():求平均值,只适用于数值类型字段,字符串类型不会报错会返回0,会自动过滤空值 ...

  4. mysql的聚合函数文档_MySQL聚合函数

    MySQL聚合函数 MySQL的聚合函数用于对多个值执行计算,并将结果返回为单个值,如所有值的平均值,所有值的总和以及某些值组中的最大值和最小值.我们通常将聚合函数与数据查询语言中的SELECT语句一 ...

  5. MYSQL字符串聚合函数

    MYSQL字符串聚合函数学习笔记 mysql中可存储多种数据类型,varchar(字符串)则是其中一种最常见的类型.在对字符串类型进行读取时,我们有时候需要对取出的原始数据进行操作,这个操作在程序里很 ...

  6. MySQL常用时间函数

    本文转自:http://www.2cto.com/database/201307/230943.html MySQL常用时间函数 1.1 获得当前日期+时间(date + time)函数:now() ...

  7. mysql 聚合函数求乘积_手把手教你mysql(五)聚合函数

    手把手教你mysql(五)聚合函数 一: 聚合函数 1.1.COUNT()函数 1. COUNT()函数用来统计记录的条数: 2. 与GOUPE BY 关键字一起使用: 我这边仍然使用的是t_stud ...

  8. MySQL常见聚合函数

    MySQL常见函数 MySQL常见聚合函数 建表准备 一.AVG 二.COUNT 三.MAX 四.MIN 五.SUM 总结 MySQL常见聚合函数 建表准备 CREATE TABLE `student ...

  9. mysql相关聚合函数应用商品分类表

    多表查询 一.多表之间建表关系分析 ​ 一对多:商品和分类 ​ 一对一:人和身份证(比较少) ​ 多对多:课程和学生 ​ 拆分成2个1对多的关系,建立一个中间表,让中间表的两个外键分别去指向两张表的主 ...

最新文章

  1. 学习笔记第三十四节课
  2. 前阿里程序员吐槽女友败家:开酒店必须400元起步,工资只有自己的1/3
  3. SAP中的KANBAN
  4. centos8安装mongodb5
  5. QT的QMutableMapIterator类的使用
  6. 打开My Lead detail page会发生timeout的错误的解决方案
  7. 返回顶部小火箭(仿电脑管家)
  8. Spring Data对Cassandra 3的支持
  9. 工作42:可以不参考原型
  10. JVM如何判断类相同
  11. SQL的注入式攻击方式和避免方法
  12. 推荐《Office SharePoint Server 2007案例实战开发》
  13. 工作10年才懂的道理,早知道职位比现在高两级
  14. 开源分布式关系型数据库 PingCAP 完成 B 轮融资
  15. RubyInstallers无法下载或下载缓慢的问题
  16. 企业内网DNS搭建,SmartDNS,网站访问加速,解决dns污染等问题
  17. Ubuntu安装 apache2 mysql php5 freeradius
  18. python中的序列类型数据结构元素的切片操作_PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)...
  19. 微软发布2010年度经典MSN签名
  20. kube-proxy模式之iptables

热门文章

  1. python实现自动点赞——实践_2022-01-02
  2. Go1.8 泛型简单上手使用
  3. 网建短信通PHP代码
  4. poj1236+la4287【tarjan算法】
  5. beautifulsoup4的摘抄
  6. JS判断数据类型的5种方法
  7. 为什么芯片上的晶体管越做越小?
  8. 工具类在线教育走向何处
  9. 网站安全需注意,华为云为企业稳定运营保驾护航
  10. 公务员考试知识点总结_判断