分组统计

来源:互联网 发布:刘亦婷混的好吗知乎 编辑:程序博客网 时间:2024/04/30 22:00

组函数的操作是基于一批行进行的,从而每一组得出一个结果。

组函数的类型     AVG、COUNT、MAX、MIN、STDDEV、SUM、VARIANCE

使用AVGSUM函数

可对数值型数据使用AVGSUM函数

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

使用MINMAX函数

可对任何类型的数据应用MINMAX函数

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

COUNT(*)函数返回一张表的总行数

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

COUNT(expr)返回由expr确定的非空值总行数,例如显示EMPLOYEES表中不含空值的行数
 

SELECR  COUNT(commission_pct)  FROM  employees  WHERE  department_id = 80;

COUNT(DISTINCT expr)返回expr的不重复的且非空的行数,例如显示EMPLOYEES表中不同部门的数目
SELECT  COUNT(DISTINCT  department_id)  FROM  employees;

组函数忽略列中的空值

SELECT  AVG(commission_pct)  FROM  employees;

NVL函数可强迫组函数包括空值

SELECT  AVG(NVL(commission_pct,0))   FROM  employees;

对数据进行分组:GROUP BY子句

 所有在SELECT列表中出现的列,如果未使用组函数,那么它必须出现在GROUP BY子句中

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

GROUP BY列不必出现在SELECT列表中

SELECT  AVG(salary)  FROM  employees  GROUP  BY  department_id;

基于多列使用GROUP BY子句

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

  注:1)在SELECT列表中的任何列或者表达式不是一个累积函数,则它必须出现在GROPU BY子句中

2)你无法通过WHERE子句限定组
3)使用HAVING子句可以限定组
4)不能在WHERE子句中使用组函数

使用HAVING子句限定分组:

1.行被分组
2.应用组函数
3.显示与HAVING子句相匹配的组

SELECT  column,group_function  FROM  table  [WHERE  condition]  [GROUP  BY  group_by_expression]

[HAVING  group_condition]  [ORDER  BY  column];

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

SELECT  job_id,SUM(salary)  PAYROLL  FROM  employees  WHERE  job_id  NOT  LIKE  '%REP%'  GROUP  BY  job_id  HAVING  SUM(salary)>13000;