`

Oracle之分组函数

阅读更多
组函数:
一、Oracle 服务器按下面的顺序求子句的值:
1. 如果语句包含一个 WHERE 子句,服务器建立侯选行。
2. 服务器确定在 GROUP BY 子句中指定的组。
3. HAVING 子句进一步约束不满足在 HAVING 子句中分组标准的结果分组。

二、组函数的类型:
•AVG 平均值•COUNT 计数•MAX 最大值•MIN 最小值•STDDEV 标准差•SUM 合计•VARIANCE 方差
1.所有组函数忽略空值。为了用一个值代替空值,用 NVL、NVL2 或 COALESCE 函数。
2.DISTINCT 使得函数只考虑不重复的值;ALL 使得函数考虑每个值,包括重复值。默认值是 ALL ,因此不

需要指定。
3.用于函数的参数的数据类型可以是 CHAR、VARCHAR2、NUMBER 或 DATE。
4.当使用 GROUP BY 子句时,Oracle 服务器隐式以升序排序结果集。为了覆盖该默认顺序,DESC 可以被用

于 ORDER BY 子句。
使用类型:可以使用MIN 和MAX 用于任何数据类型,AVG、SUM、VARIANCE 和 STDDEV 函数只能被用于数字

数据类型。
COUNT 函数
COUNT 函数有三中格式:
COUNT(*)                 返回select语句的标准行,包括重复行,空值列的行
COUNT(expr)              由 expr 指定的非空值的数。
COUNT(DISTINCT expr)     返回在列中的由 expr 指定的唯一的非空值的数。 
在组函数中使用NVL 函数:
NVL 函数强制组函数包含空值
SELECT AVG(NVL(commission_pct, 0))FROM employees;
三、group by子句
GROUP BY 子句把表中的行划分为组。然后你可以用组函数返回每一组的摘要信息。
原则
如果在 SELECT 子句中包含了组函数,就不能选择单独的结果,除非单独的列出现在 GROUP BY 子句中。如

果你未能在 GROUP BY 子句中包含一个字段列表,你会收到一个错误信息。
使用 WHERE 子句,你可以在划分行成组以前过滤行。
在 GROUP BY 子句中必须包含列。
在 GROUP BY 子句中你不能用列别名。
默认情况下,行以包含在 GROUP BY 列表中的字段的升序排序。你可以用 ORDER BY 子句覆盖这个默认值。
在SELECT 列表中的不在组函数中的所有列必须在GROUP BY 子句中
SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id ;

SELECT 子句指定要返回的列:
在 EMPLOYEES 表中的部门号
你在 GROUP BY 子句中指定分组的所有薪水的平均值
FROM 子句指定数据库必须访问的表:EMPLOYEES 表。
WHERE 子句指定被返回的行。因为无 WHERE 子句默认情况下所有行被返回。
GROUP BY 子句指定行怎样被分组。行用部门号分组,所以 AVG 函数被应用于薪水列,以计算每个部门的平

均薪水。
注意:分组结果被以分组列隐式排序,可以用 ORDER BY 指定不同的排序顺序,但只能用组函数或分组列。
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary);


四。多于一个列的分组
显示在每个部门中付给每个工作岗位的合计薪水的报告。(先按部门分组,再按部门下工作岗位分组)
SELECT department_id dept_id, job_id, SUM(salary)FROM employeesGROUP BY department_id, job_id ;

SELECT 子句指定被返回的列:
部门号在 EMPLOYEES 表中
Job ID 在 EMPLOYEES 表中
你在 GROUP BY 子句中指定的组中所有薪水的合计
FROM 子句指定数据库必须访问的表:EMPLOYEES 表。
GROUP BY 子句指定你怎样分组行:
首先,用部门号分组行。
第二,在部门号的分组中再用 job ID 分组行。
五.非法使用组函数:
1.在SELECT 列表中的任何列或表达式(非计算列)必须在GROUP BY 子句中,在GROUP BY 子句中的列或表

达式不必在SELECT 列表中
SELECT department_id, COUNT(last_name)FROM employees;
SELECT department_id, COUNT(last_name)
       *
ERROR at line 1:ORA-00937: not a single-group group
无论何时,你在同一个 SELECT 语句中使用单独的列 (DEPARTMENT_ID) 和组函数 (COUNT) 的混合时,你必

须包括一个 GROUP BY 子句来指定单独的列 (在本例中,DEPARTMENT_ID)。如果缺少 GROUP BY,将会出现

错误信息 “not a single-group group function”,并且一个星号 (*) 位于有问题的列的下面。你可以

添加 GROUP BY 子句来纠正幻灯片中的这个错误。
SELECT department_id, count(last_name)
FROM employees
GROUP BY department_id;

2.非法使用Group 函数的查询
不能使用WHERE 子句来约束分组
可以使用HAVING 子句来约束分组
在WHERE 子句中不能使用组函数作为条件,只能用非计算列
例子:
SELECT department_id, AVG(salary)FROM employeesWHERE AVG(salary) > 8000GROUP BY department_id;
WHERE AVG(salary) > 8000
      *
ERROR at line 3:ORA-00934: group function is not allowed here


WHERE 子句不能用于限制组。幻灯片中的 SELECT 子句结果出现错误。因为使用 WHERE 子句限制了那些只

有部门的平均薪水大于 $8,000 的分组才能显示。
你可以用 HAVING 约束组来纠正幻灯片中的错误。
SELECT department_id, AVG(salary)
FROM employees;
HAVING AVG(salary) > 8000
GROUP BY department_id;

6.约束分组结果
用HAVING 子句约束分组:
1.行被分组
2.应用组函数
3.匹配HAVING 子句的组被显示
例子:
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);


7.嵌套组函数
求每个部门的最大平均薪水。
select max(avg(salary)) from employees group by department_id;
  • 大小: 5.5 KB
分享到:
评论

相关推荐

    oracle笔记分组函数

    oracle笔记分组函数,涉及组函数案例,在使用组函数的过程中注意事项,有具体的案例说明!

    oracle 分组函数

    本篇文章将详细阐述Oracle分组函数的概念、功能以及常用分组函数的使用方法。 一、分组函数概述 分组函数主要作用于一组数据上,而不是单个记录,它们用于对数据进行汇总,如计算总和、平均值、最大值、最小值等。...

    Oracle分组函数之ROLLUP的基本用法

    本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as select * from scott.dept; create table emp as select * from ...

    Oracle数据库使用分组函数来对数据进行聚集

    Oracle数据库使用分组函数来对数据进行聚集

    oracle分组函数(ppt文档).ppt

    Oracle 分组函数 Oracle 分组函数是一种特殊的函数,用于对查询结果进行分组处理。分组函数可以对查询结果进行聚合操作,例如计算平均值、总和、最小值、最大值等。 Oracle 提供了多种分组函数,包括 AVG、SUM、...

    oracle分组函数

    ### Oracle 分组函数详解 #### 一、章节目标与内容概览 在Oracle数据库中,分组函数(也称为聚合函数)是一种强大的工具,用于处理数据集并从中提取有用的信息。通过本章节的学习,读者将能够理解单行函数与分组...

    oracle函数和分组

    在Oracle数据库中,函数和分组是进行数据处理和分析的重要工具。本篇将详细介绍一些常用的Oracle内建函数,特别是字符函数、数字函数以及分组相关的GROUP BY子句和HAVING子句。 首先,我们来看字符函数。字符函数...

    SQLServer和Oracle的常用函数对比

    在数据库管理领域,SQLServer与Oracle作为两大主流的数据库管理系统,各自拥有丰富的内置函数,用于数据处理、...掌握这些函数的不同之处,有助于数据库开发者在跨平台迁移时更加得心应手,提高代码的通用性和移植性。

    oracle开窗函数学习技巧总结

    通过本文的学习,我们可以看到Oracle开窗函数的强大之处。无论是进行复杂的数据分析还是报表生成,开窗函数都能够提供极大的便利。掌握这些技巧不仅能够提高工作效率,还能够帮助我们在处理大数据时更加得心应手。...

    Oracle中的分析函数详解

    分析函数(Analytic Functions)是Oracle SQL中的高级特性,它们在数据集上执行计算,并返回基于分组或排序的数据结果。与聚合函数(如SUM, AVG, COUNT等)不同,分析函数可以在每个行级别上返回结果,而不只是返回...

    Oracle中分组后拼接分组字符串.pdf

    Oracle 中分组后拼接分组字符串 本文主要介绍了在 Oracle 中如何对分组后的数据进行拼接操作,生成分组字符串。下面将对这个问题进行详细的分析和解释。 首先,我们需要创建一个测试表,并插入一些测试数据。这个...

    oracle的分析函数汇总

    Oracle 分析函数汇总 Oracle 分析函数是 Oracle 8.16 中引入的一个全新的概念,为我们分析数据提供了一种简单高效的处理方式。下面我们将对 Oracle 分析函数进行详细的介绍和分析。 自动汇总函数 自动汇总函数...

    Oracle中用GROUPING SETS分组自定义汇总

    `GROUPING_ID`函数可以用来标识当前行属于哪个分组集,这对于解析结果集非常有用。 总的来说,`GROUP BY GROUPING SETS`在处理多维度分析时提供了强大的工具,允许我们定制汇总级别,同时保持查询性能的高效。它...

    oracle 10G函数大全(中文)

    - 分组函数如COUNT、SUM、AVG、MAX、MIN在GROUP BY子句中使用,对分组数据进行计算。 - 分析函数如ROW_NUMBER、RANK、DENSE_RANK、LAG、LEAD等,用于窗口查询,提供行间计算功能。 5. **连接和比较函数**: - ...

    Oracle内建函数大全

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数库是其核心优势之一。本文将深入探讨Oracle内建函数,旨在帮助用户更好地理解和利用这些功能来优化数据库操作。 1. **数学函数** -...

    oracle系统内置函数大全

    Oracle数据库系统内置了大量函数,这些函数可以分为多个类别,例如字符函数、数字函数、日期函数、转换函数、分组函数以及其他辅助函数等。以下是对每个类别中一些常用函数的详细介绍: 字符函数 1. ASCII函数:...

    Oracle10G函数大全(chm格式的,比较全面)

    7. **连接和分组函数**: - `CONNECT_BY_ROOT()`: 在层次查询中,标识根节点。 - `GROUP BY`: 对查询结果进行分组。 - `ROLLUP()`: 生成汇总行,用于创建多级分组。 8. **游标和循环控制**: - `CURSOR`: 定义...

    oracle sql内置函数大全

    在Oracle数据库系统中,内置函数分为多种类型,包括数值函数、字符串函数、日期时间函数、转换函数、数学函数、聚合函数等。下面将详细介绍这些函数类别及其常见用法。 1. **数值函数**: - `ABS()`:返回一个数的...

    oracle 9i 分析函数参考手册.rar

    Oracle 9i 分析函数是数据库查询中一种强大的工具,它们允许在单个查询中对一组行进行聚合操作,同时保留原始行的细节。在Oracle数据库系统中,分析函数为数据分析师和数据库管理员提供了深入洞察数据的能力,尤其在...

Global site tag (gtag.js) - Google Analytics