聚合函数
聚合函数也称之为多行函数,组函数或分组函数。聚合函数不象单行函数,聚合函数对行的分组进行操作,对每组给出一个结果。如果在查询中没有指定分组,那么聚合函数则将查询到的结果集视为一组。
聚合函数类型
AVG 和 SUM 函数
AVG(arg)函数
对分组数据做平均值运算。
arg:参数类型只能是数字类型。
SUM(arg)函数
对分组数据求和。
arg:参数类型只能是数字类型。
计算员工表中工作编号含有REP的工作岗位的平均薪水与薪水总和。
SELECT AVG(salary),SUM(salary) FROM employees WHERE job_id LIKE '%REP%';
MIN 和 MAX 函数
MIN(arg)函数
求分组中最小数据。
arg:参数类型可以是字符、数字、 日期。
MAX(arg)函数
求分组中最大数据。
arg:参数类型可以是字符、数字、 日期。
查询员工表中入职时间最短与最长的员工,并显示他们的入职时间。
SELECT MIN(hire_date), MAX(hire_date) FROM employees;
COUNT 函数
返回分组中的总行数。
COUNT 函数有三种格式:
- COUNT(*):返回表中满足 SELECT 语句的所有列的行数,包括重复行,包括有空值列的行。
- COUNT(expr):返回在列中的由 expr 指定的非空值的数。
- COUNT(DISTINCT expr):返回在列中的由 expr 指定的唯一的非空值的数。
使用 DISTINCT 关键字
- COUNT(DISTINCT expr) 返回对于表达式 expr 非空并且值不相同的行数
- 显示 EMPLOYEES 表中不同部门数的值
显示员工表中部门编号是80中有佣金的雇员人数。
SELECT COUNT(commission_pct) FROM employees WHERE department_id = 80;
显示员工表中的部门数。
SELECT COUNT(DISTINCT department_id) FROM employees;
、
数据分组(GROUP BY)
使用group by子句
SELECT 子句指定要返回的列:
- 在 EMPLOYEES 表中的部门号
- GROUP BY 子句中指定分组的所有薪水的平均值
- FROM 子句指定数据库必须访问的表:EMPLOYEES 表。
- WHERE 子句指定被返回的行。因为无 WHERE 子句默认情况下所有行被返回。
- GROUP BY 子句指定行怎样被分组。行用部门号分组,所以AVG 函数被应用于薪水列,以计算每个部门的平均薪水。
计算每个部门的员工总数。
SELECT DEPARTMENT_ID, COUNT(*) FROM employees GROUP BY DEPARTMENT_ID;
约束分组结果
HAVING 子句
HAVING 子句是对查询出结果集分组后的结果进行过滤。
约束分组结果
用 WHERE 子句约束选择的行,用 HAVING 子句约束组。为了找到每个部门中的最高薪水,而且只显示最高薪水大于 $10,000 的那些部门,可以象下面这样做:
- 用部门号分组,在每个部门中找最大薪水。
- 返回那些有最高薪水大于 $10,000 的雇员的部门
SELECT department_id, MAX(salary) FROM employees GROUP BY department_id HAVINGMAX(salary)>10000 ;
显示那些合计薪水超过 13,000 的每个工作岗位的合计薪水。排除那些JOB_ID中含有REP的工作岗位,并且用合计月薪排序列表
SELECT job_id, SUM(salary) PAYROLL FROM employees WHERE job_id NOT LIKE '%REP%'GROUP BY job_id HAVING SUM(salary) > 13000 ORDER BY SUM(salary);