Advertisement

第六章分组函数课堂笔记和练习

阅读量:

– 分组函数

  • 常用的五个分组函数

– min()最小值,max()最大值,所有类型

复制代码
    select min(hiredate), max(hiredate) from emp;

    select min(sal), max(sal) from emp;

sum()计算总和, avg()计算平均值 – 这些函数仅适用于处理数值型数据

复制代码
    select sum(sal),avg(sal) from emp; --  avg排除null做计算

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

– 使用COUNT()函数可以计算满足条件的数据条数,并且不会包含重复记录。
– 除了COUNT(*)外,其他分组函数在处理时会自动跳过包含空白值的字段。
这些分组函数会根据具体情况执行相应的数值运算。

复制代码
    select count(*) from emp where deptno = 30; --  任意数值

    select count(1) from emp where deptno = 30; -- 一个数值 
    select count(ename) from emp where deptno = 30; -- 列名

– 在组函数中使用distinct关键字。
distinct用于先从数据中消除重复记录后,在进行分组计算。
– 此查询旨在统计具有员工的部门数量。

复制代码
    select count (distinct deptno)

      from emp;

– 在分组函数中调用 nvl 函数
– nvl 函数会使得分组函数强制地包含含有空值的记录

复制代码
    select avg (nvl (comm, 0))

      from emp;

– group by 子项
– 利用 group by 子项可将表内符合 WHERE 条件的所有记录按
-> 指定的一组列划分为若干个小群体
– 其中 group by 子项用于指明需进行分组的字段
注意:在一个 group by 表达式内
– select 子项仅限于分组函数或是该 group by 表达式所指明的那一组字段
若在一个查询中调用了聚合函数
– 所有未被该聚合函数所涉及的字段或表达式均应包含于group by子 clause之中。

复制代码
    select deptno from group by deptno;
    select deptno, job, sum(sal) 工资总和 from emp group by deptno, job;

– having 子句

复制代码
    select deptno, max(sal) 最大值 from emp
     group by deptno
    having max(sal) > 2900;

-组函数嵌套

与单行函数不同,组函数只能嵌套两层

select 语句执行顺序:

复制代码
    5 SELECT       [column,] group_function(column)
    
    1 FROM         table
    
    2 [WHERE       condition]
    
    3 [GROUP     BY column]
    
    4 [HAVING    roup_function(column)expression 
    
    6 [ORDER BY column| group_function(column)expression];
    
    
    SELECT语句执行过程:
    1.通过FROM子句中找到需要查询的表;
    
    2.通过WHERE子句进行非分组函数筛选判断;
    
    3.通过GROUP BY子句完成分组操作;
    
    4.通过HAVING子句完成组函数筛选判断;
    
    5.通过SELECT子句选择显示的列或表达式及组函数;
    
    6.通过ORDER BY子句进行排序操作。

全部评论 (0)

还没有任何评论哟~