分组函数:
分组函数作用于一组数据,并对一组数据返回一个值。
组函数忽略空值。
NVL函数使分组函数无法忽略空值。
组函数类型:
AVG( expr):返回expr的平均值,只能用于数值型数据。
COUNT(expr ): 返回expr不为空的记录总数。,适用于任意数据类型。
MAX( expr):返回expr的最大值,适用于任意数据类型 。
MIN ( expr):返回expr的最小值,适用于任意数据类型。
STDDEV(expr ):返回expr的标准偏差,只能用于数值型数据。
SUM( expr):返回expr的总值,即求和,只能用于数值型数据。
COUNT(DISTINCT expr):返回expr非空且不重复的记录总数。
AVG( expr)=SUM( expr) / COUNT(expr )。
例如:
SELECT
AVG(salary),
SUM(salary),
MIN(salary),
MAX(salary)
FROM
employees;
输出:
例如:
SELECT
AVG (commission_pct),
SUM (commission_pct) / COUNT (commission_pct)
FROM
employees;
输出:
分组数据:
GROUP BY 子句语法:可以使用GROUP BY子句将表中的数据分成若干组。
例如:
求出各个部门的平均工资
SELECT
department_id,
AVG (salary)
FROM
employees
GROUP BY
department_id
输出:
在SELECT 列表中所有未包含在组函数中的列(字段)都应该包含 在 GROUP BY 子句中。包含在 GROUP BY 子句中的列不必包含在SELECT 列表中。
例如:
求出各个部门,各个工种的平均工资:
SELECT
department_id,
job_id,
AVG (salary)
FROM
employees
GROUP BY
department_id,
job_id
输出:
SELECT
AVG (salary)
FROM
employees
GROUP BY
department_id,
job_id
输出:
不能在 WHERE 子句中使用组函数。 可以在 HAVING 子句中使用组函数。
过滤分组: HAVING 子句。
使用 HAVING 过滤分组:
1. 行已经被分组。
2. 使用了组函数。
3. 满足HAVING 子句中条件的分组将被显示。
例如:
查出各部门中平均工资大于6000的部门,以及其平均工资
SELECT
department_id,
AVG (salary)
FROM
employees
HAVING
AVG (salary)>6000
GROUP BY
department_id
输出:
嵌套组函数:
显示各部门平均工资的最大值:
SELECT
MAX(AVG (salary))
FROM
employees
GROUP BY
department_id
参考来自尚硅谷视频