一、分组函数
1、分组函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数;
2、分类
sum 求和
avg 平均值
max 最大值
min 最小值
count 计算个数
3、特点
(1)sum 与 avg 一般用于处理数值型;max、min、count 可以处理任何类型;
(2)以上所有的分组函数都忽略 null 值;
(3)可以和 distinct 搭配去实现去重的运算,即先去重,再进行运算;
(4)count 函数的单独介绍一般使用 count(*) 用作统计行数;
(5)和分组函数一同查询的字段要求是 group by 后的字段;
二、案例
1、简单使用
SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT COUNT(salary) FROM employees;
SELECT SUM(salary) 和, AVG(salary) 平均, MAX(salary) 最高, MIN(salary) 最低, COUNT(salary) 个数 FROM employees;
SELECT ROUND(AVG(salary), 2) FROM employees;
2、参数支持哪些类型
SELECT SUM(last_name), AVG(last_name) FROM employees; #不支持字符型
SELECT MAX(last_name), MIN(last_name), COUNT(last_name) FROM employees; #支持字符型
SELECT MAX(hiredate), MIN(hiredate), COUNT(hiredate) FROM employees; #支持日期等类型
SELECT COUNT(commission_pct) FROM employees; #不支持 null
SELECT COUNT(last_name) FROM employees; # 支持字符型
3、是否忽略 null 值
SELECT SUM(commission_pct), AVG(commission_pct) FROM employees; #不包含 null值
SELECT SUM(commission_pct), AVG(commission_pct), SUM(commission_pct)/35,SUM(commission_pct)/107
FROM employees;
SELECT MAX(commission_pct), MIN(commission_pct), COUNT(commission_pct) FROM employees; #不包含null值
SELECT COUNT(commission_pct) FROM employees; #不会统计 null 值
4、与 distinct 搭配
聚合函数可以和 distinct 搭配使用。
案例:
SELECT SUM(DISTINCT salary), SUM(salary) FROM employees;
SELECT COUNT(DISTINCT salary), COUNT(salary) FROM employees;
5、count 详细介绍
count() 用于统计记录的个数,里面参数可以是字段名或常量值。
案例:
SELECT COUNT(salary) FROM employees;
SELECT COUNT(*) FROM employees; #统计总行数,只要有任何一个字段不为null就计数
SELECT COUNT(1) FROM employees; #统计总行数,为每行前面加一个字段,然后统计有多少行
SELECT COUNT('A') FROM employees; #相当于为每行前面加一个常量值,然后统计行数
6、和分组函数一同查询的字段有限制
和分组函数一同查询的字段一般都需要明确的意义,像下面的SQL语句可以正常执行,但是没有任何意义。
例如:
SELECT AVG(salary), employee_id FROM employees;
三、练习
1、查询公司员工工资的最大值,最小值,平均值,总和
SELECT
MAX(salary) 最大值,
MIN(salary) 最小值,
AVG(salary) 平均值,
SUM(salary) 和
FROM
employees ;
2、查询员工表中的最大入职时间和最小入职时间的相差天数 (DIFFRENCE)
datediff(date1, date2):计算两个日期的时间差。
例如:
SELECT DATEDIFF('1995-2-7','1995-2-4'); #3
利用函数
SELECT
DATEDIFF(MAX(hiredate), MIN(hiredate)) DIFFRENCE
FROM
employees ; #8735
3、查询部门编号为 90 的员工个数
SELECT
COUNT(*)
FROM
employees
WHERE department_id = 90 ;