`

Oracle 分组与分组函数

 
阅读更多

一、分组:

    分组函数可以对行集进行操作,并且为每组给出一个结果。

   使用group by column1column2,..columm1,column2进行分组,即column1,column2组合相同的值为一个组

 

二、常用分组函数: */

    AVG([DISTINCT|ALL]n)        -- 求平均值,忽略空值

    COUNT({*|[DISTINCT|ALL]expr})  -- 统计个数,其中expr用来判定非空值(使用*计算所有选定行,包括重复行和带有空值的行)

    MAX([DISTINCT|ALL]expr)        -- 求最大值,忽略空值

    MIN([DISTINCT|ALL]expr)        -- 求最小值,忽略空值

    SUM([DISTINCT|ALL]n)        -- 求和,忽略空值

/*

三、分组函数语法:*/

    SELECT [column,] group_function(column), ...

    FROM table

    [WHERE condition]

    [GROUP BY column]

    [ORDER BY column];

/*

四、分组函数使用准则:

    DISTINCT 使函数只考虑非重复值,ALL则考虑包括重复值在内的所有值。默认为ALL

  带有expr参数的函数的数据类型可以为CHAR,VARCHAR2,NUMBER,DATE.

    所有分组函数都忽略空值。可以使用NVL,NVL2,COALESCE函数代替空值

    使用GROUP BY 时,Oralce服务器隐式地按照升序对结果集进行排序。可以使用ORDER BY 更改排序结果。 

 

     可以使用NVL 函数强制分组函数包含空值,如:*/

        select avg(nvl(comm,0)) from emp;  

/*    

五、GROUP BY 子句的语法:

    使用GROUP BY 子句可以将表中的行分成更小的组,然后使用分组函数返回每一组的汇总信息*/

    SELECT column, group_function(column)

    FROM table

    [WHERE condition]

    [GROUP BY group_by_expression]

    [ORDER BY column];

 

    GROUP BY  --group_by_expression 即为对哪些列进行分组

/* 

六、GROUP BY 使用准则:

    SELECT 中出现的列,如果未出现在分组函数中,则GROUP BY子句必须包含这些列

    WHERE 子句可以某些行在分组之前排除在外

    不能在GROUP BY 中使用列别名

    默认情况下GROUP BY列表中的列按升序排列

    GROUP BY 的列可以不出现在分组中 

   

七、分组过滤:

    使用having子句

   

    having使用的情况:

       行已经被分组

       使用了组函数

       满足having子句中条件的分组将被显示

 

八、演示:*/

--为数字数据使用AVGSUM方法

    SQL> select min(sal) as min_sal,max(sal) as max_sal,

      2    avg(sal) as avg_sal,sum(sal) as sum_sal

      3  from scott.emp;

 

       MIN_SAL    MAX_SAL    AVG_SAL    SUM_SAL

    ---------- ---------- ---------- ----------

          800       5000 2073.21429      29025

 

--对于数字,字符和日期数据类型,你能使用MINMAX方法     

    SQL> select min(hiredate) as min_hiredate,max(hiredate) as max_hiredate from scott.emp;

 

    MIN_HIRED MAX_HIRED

    --------- ---------

    17-DEC-80 23-MAY-87

 

--使用count(*),count(expr),count(distinct expr)

--注意coung(*)包含空值、重复值,count(expr)过滤空值,count(distinct expr)即过滤空值,也过滤重复值

    SQL> select count(*),count(mgr),count(distinct mgr) from emp;

 

      COUNT(*) COUNT(MGR) COUNT(DISTINCTMGR)

    ---------- ---------- ------------------

           14         13                  6

 

--使用NVL 函数强制分组函数包含空值

    SQL> select avg(comm) ,avg(nvl(comm,0)) from emp;

 

     AVG(COMM) AVG(NVL(COMM,0))

    ---------- ----------------

          550       157.142857   

 

--使用group by 子句来分组

    SQL> select job ,avg(sal) from emp group by job;

 

    JOB         AVG(SAL)

    --------- ----------

    CLERK         1037.5

    SALESMAN        1400

    PRESIDENT       5000

    MANAGER   2758.33333

    ANALYST         3000

 

--GROUP BY 的列可以不出现在分组中  

    SQL> select avg(sal) from emp group by job order by avg(sal) desc;

 

      AVG(SAL)

    ----------

         5000

         3000

    2758.33333

         1400

       1037.5

 

--错误的用法,SELECT 中的有些列没有在GROUP BY子句中出现

    SQL> select job,avg(sal) from emp;

    select job,avg(sal) from emp

          *

    ERROR at line 1:

    ORA-00937: not a single-group group function 

 

--使用having子句过滤分组结果

--查询平均工资高于的部门号,及其平均工资。

 

    select deptno,avg(sal) from emp group by deptno

    having avg(sal)>2000;

 

--查出平均工资在以上的工种(job)

    select job,avg(sal) from emp group by job having avg(sal)>2000;

   

--求人数在人以上的部门

    select deptno,count(*) from emp group by deptno having count(*)>5;

   

--使用分组函数的嵌套

    SQL> select max(avg(sal)) from emp group by deptno;

 

    MAX(AVG(SAL))

    -------------

       2916.66667

分享到:
评论

相关推荐

    oracle 分组函数

    1. 分组函数不能与非分组列一起出现在SELECT语句的非聚合表达式中,除非该列被包含在`GROUP BY`子句中。 2. 使用HAVING子句过滤分组后的结果,而WHERE子句则是在分组前过滤原始数据。 3. 分组函数可以嵌套使用,...

    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函数和分组

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

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

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

    oracle分组排序统计高级用法

    - **基本语法**: `DENSE_RANK()`函数与`RANK()`类似,但是当出现并列排名时,`DENSE_RANK()`不会跳过任何排名。 ```sql DENSE_RANK() OVER (PARTITION BY <column_list> ORDER BY ) ``` - **示例**: 同上,...

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

    Oracle 中分组后拼接分组字符串 在 Oracle 中,分组后拼接...本文介绍了如何在 Oracle 中使用 `sys_connect_by_path` 函数与 `start` 递归实现分组后拼接分组字符串。该方法可以应用于各种数据分析和报表生成场景。

    oracle 函数大全oracle 函数大全

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,它包含了大量的内置函数,这些函数极大地增强了SQL查询的能力,提高了数据处理的效率。本篇文章将详细介绍Oracle数据库中的一些关键函数,并提供实际应用...

    SQLServer和Oracle的常用函数对比

    在数据库管理领域,SQLServer与Oracle作为两大主流的数据库管理系统,各自拥有丰富的内置函数,用于数据处理、查询优化以及各种复杂的数据操作需求。本文将基于给定文件信息,深入探讨和对比SQLServer与Oracle中的...

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

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

    oracle函数分类.rar

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,其强大的功能之一在于丰富的内置函数。这些函数极大地提高了数据处理和查询的效率。下面将详细讲解在"oracle函数分类.rar"压缩包中的主要函数类别及其应用...

    Oracle函数大全实例

    分组函数通常与`GROUP BY`语句一起使用,用于按列分组数据并计算分组级别的统计信息。 - **AVG()**: 分组内的平均值。 - **COUNT()**: 按组统计行数。 - **MAX()**: 分组内的最大值。 - **MIN()**: 分组内的...

    Oracle函数大全-详细介绍.rar

    分析函数是Oracle中的一个重要特性,它们允许在分组或排序的数据集上进行计算。比如,`RANK()`和`DENSE_RANK()`为每个组内的行分配唯一的排名,`LEAD()`和`LAG()`可以访问当前行的前后行数据,`ROW_NUMBER()`为每行...

    oracle日常函数文档

    七、连接和分组函数 在SQL查询中,`CONNECT_BY_ROOT`, `LEVEL`, `START WITH`和`CONNECT BY`用于构建层次查询;`GROUP BY`和`HAVING`则用于数据的分组和过滤,它们是数据分析和报表生成的基础。 以上只是Oracle日常...

    oracle函数大全(分类成9个word文档)

    4. "oracle函数介绍(5) 分析函数简述.doc":分析函数,如RANK()、ROW_NUMBER()和LEAD/LAG(),在处理分组数据时非常有用,可以提供行级别的排序和计算。 5. "oracle函数介绍(6) 著名函数之分析函数.doc"和"oracle...

    oracle函数大全(分类显示).zip_Oracle 函数分类_oracle_oracle函数分类_oracle函数查阅用文档

    9. **排序和分组函数**: RANK、DENSE_RANK、ROW_NUMBER、GROUP BY、ORDER BY,用于数据的排序和分组。RANK、DENSE_RANK和ROW_NUMBER提供行号,GROUP BY用于对数据进行分组,ORDER BY则对结果进行排序。 这些只是...

    SQL之分组统计和子查询专题

    * 分组函数可以在没有分组的时候单独使用,可是却不能出现其它的查询字段。 子查询 子查询是一种复杂的查询方式,相当于简单查询 + 限定查询 + 多表查询 + 统计查询的综合体。子查询可以出现在SELECT、FROM、WHERE...

Global site tag (gtag.js) - Google Analytics