MySQL DQL 语言 - 常见函数(3 - 分组函数)

MySQL DQL 语言 - 常见函数(3 - 分组函数)

功能:
用作统计使用,又称为 聚合函数,统计函数,组函数。

下面主要包括:SUM:求和, AVG:平均值, MAX:最大值, MIN:最小值, COUNT:计算个数。


语法

[] 表示可选。

SUM([DISTINCT] expr);
MIN([DISTINCT] expr);
MAX([DISTINCT] expr);

DISTINCT 去除。


SELECT SUM(salary) AS 求和	
FROM employees;
求和
691400.00

单行函数 中,运算结果一般都是很多行(即:函数对每一行分别出一次结果),而 分组函数 如上面,对所有行,只出一个结果。

SELECT SUM(salary) FROM employees;		#691400.00
SELECT AVG(salary) FROM employees;		#6461.682243
SELECT MIN(salary) FROM employees;		#2100.00
SELECT MAX(salary) FROM employees;		#24000.00
SELECT COUNT(salary) FROM employees;	#107

也可以写在一起:

SELECT 
	SUM(salary) sum, 
	AVG(salary) avg, 
	MAX(salary) max, 
	MIN(salary) min,
	COUNT(salary) count
FROM employees;
sumavgmaxmincount
691400.006461.68224324000.002100.00107

平均值保留 2 位:

SELECT ROUND(AVG(salary), 2) FROM employees;		#6461.68

参数所支持类型
  1. SUM AVG 一般只适用于处理 数值型
  2. MAXMIN 支持 字符型日期型
  3. COUNT 支持任何类型。(COUNT 计算相应字段 非空 的数量)
SELECT MAX(last_name) max, MIN(last_name) min FROM employees;
maxmin
ZlotkeyAbel

last_name字符型,字符型可以进行排序,所以,就会存在 可比性,所以 MAXMIN 支持 字符型

SELECT MAX(hiredate) max, MIN(hiredate) min FROM employees;
maxmin
2016-03-03 00:00:001992-04-03 00:00:00

hiredate日期型


是否忽略 NULL

SUM AVG MAX MIN COUNT 忽略 NULL

SELECT 
	SUM(commission_pct) sum, 
	AVG(commission_pct) avg, 
	SUM(commission_pct) / 35 avg35, 
	SUM(commission_pct) / 107 avg107 
FROM employees;
sumavgavg35avg107
7.800.2228570.2228570.072897

commission_pct 包含 NULL

  1. SUM:结果出现数据,而 NULL + 任何值都为 NULL,所以 SUM 忽略 NULL
  2. AVG:表中共有 107 条数据,35 条数据的 commission_pct 不为 NULLavgavg35 的值相同,所以 AVG 忽略 NULL
SELECT MAX(commission_pct) max, MIN(commission_pct) min FROM employees;
maxmin
0.400.10

commission_pct 存在 NULL,如果 MAX MIN 不忽略 NULL,那么,要么最小值为 NULL,要么最大值为 NULL

COUNT 定义:计算非空的值的数量,所以忽略 NULL


搭配 DISTINCT 实现去除
SELECT SUM(DISTINCT salary) , SUM(salary) FROM employees;
SUM(DISTINCT salary)SUM(salary)
397900.00691400.00

加入 DISTINCT 后会先去重,然后求和。

SELECT COUNT(DISTINCT salary) ,COUNT(salary) FROM employees;
COUNT(DISTINCT salary)COUNT(salary)
57107

去重后,就是计算有多少种不同的工资了。


COUNT
COUNT(expr);
SELECT COUNT(*) FROM employees;

COUNT(*) 经常用来统计总行数:
假设一个表中有三列 A B CA 列第 3 行为 NULLB 列第 5 行为 NULLC 列第 7 行为 NULL,但只要 B C 列中有一列部位 NULL,那么行数就会 +1。如果所有列都为 NULL,那这一行自然是不存在数据的。

SELECT COUNT(1) FROM employees;

也是统计总行数:
相当于在原表之外又增加了一个新列,这列的行数和表中其他列的行数相等,并且所有行的数据均为 1 。所以相当于在计算新增加这列的行数,所以也是总行数。
注:
只要加的是常量值即可。

效率:

  1. MYISAM 存储引擎下,COUNT(*) 效率最高
  2. INNODB 存储引擎下,COUNT(*)COUNT(1) 效率差不多,比 COUNT(字段) 要高一些,因为 加字段,要先判断字段是否为 NULL

和分组函数一同查询的字段有限制

和分组函数一同查询的字段要求是 GROUT BY 后的字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值