Oracle——分组函数

Posted Wayfo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle——分组函数相关的知识,希望对你有一定的参考价值。

AVG(平均值)和 SUM (合计)函数

  • 可以对数值型数据使用AVG 和 SUM 函数。
  • AVG组函数忽略空值
--在组函数中使用NVL函数
--求平均值
sum(expr)/count(nvl(expr,0))

MIN(最小值)和 MAX(最大值)函数

  • 可以对任意数据类型的数据使用 MIN 和 MAX 函数。
SELECT MIN(hire_date), MAX(hire_date)
FROM employees;

COUNT(*) 返回表中记录总数,适用于任意数据类型。

SELECT COUNT(*)
FROM    employees
WHERE department_id = 50;
  • COUNT(expr) 返回expr不为空的记录总数。
  • COUNT(DISTINCT expr)返回expr非空且不重复的记录总数
SELECT COUNT(DISTINCT department_id)
FROM employees;

Group by

可以使用GROUP BY子句将表中的数据分成若干组

、WHERE一定放在FROM后面

select department_id ,avg(salary)
from employees
--where department_id in(20,30,40)
group by department_id

②、在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 ;

  ④、使用多个列分组

select department_id ,job_id,avg(salary)
from employees
group by department_id,job_id

   ⑤、可以在 HAVING 子句中使用组函数

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

注意:不能在 WHERE 子句中使用组函数。

  ⑥、可以在order by 子句中使用组函数

select department_id,avg(salary)
from employees
having avg(salary)>6000
group by department_id
order by avg(salary) 

以上是关于Oracle——分组函数的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 过程不是按函数分组的错误 00979

oracle 分组函数里可以嵌套吗?

oracle分组查询

oracle分组查询

oracle中的分组函数都有哪些,具体怎么用?

Oracle通用函数,分组函数,子查询