简单总结一下对于数据的分组和分组函数。

本文所举实例,数据来源oracle用户scott下的emp,dept ,salgrade 3表:数据如下:

一、分组函数

1、sum()求和函数、max()求最大值函数、min()求最小值函数、avg()求平均值函数、count()求总行数函数

Expression:   sum(column)、max(cloumn)、min(cloumn)、avg(column)、count(column)   其中column都是字段名称

Example:

select avg(sal),max(sal),min(sal),sum(sal),count(sal) from emp;

2、distinct关键字:英译有区别的,用于对同一个列去除重复值: Expression:      dinsticnt(column)

Example:

select distinct deptno from emp;

3、wm_concat函数:行转列函数,将列值以逗号作为分割显示在一行的函数。    Expression(column)

Example:

select wm_concat(ename) from emp;

二、数据分组

1、group by分组子句:和分组函数结合使用,对其他条件进行分组,如求每个部门的平均工资,平均工资用分组函数avg,每个部门则需用group by 分组

Example:

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

注意:group by字句中的条件必须是所有的除了分组以外的所有列才不会出错,并且必须和分组函数结合使用否则没有分组的意义,并且会报错。

2、having 子句:如果查询条件中有分组函数,此时不能使用where子句,替换为having子句,用于对分组后的结果进行过滤。

Example:

可以看出where子句不允许使用分组函数

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

三、经典实例分析:

1、求部门平均薪水的等级和求部门平均的薪水等级。

这里多用到一个薪水等级的表salgrade:

select deptno,avg_sal,grade from (select deptno,avg(sal) avg_sal from emp group by deptno) a join salgrade on
(a.avg_sal between losal and hisal);

解析:第一问:由问题可知需要求三个值,deptno,avg_sa,grade,求解的是平均薪水的等级,那么先求部门的平均薪水,用分组函数和group_by子句,分组条件很明显deptno,将此结果看做一个新表a,其中可以查询到deptno和avg_sal,接下来还有一个等级需要求解,直接join表salgrade,条件也很明显,平均工资在低工资和高工资之间就可以了,加入条件后即可查询出对应的grade等级

select deptno,avg(grade) from (select deptno,grade from emp e join salgrade on e.sal between losal and hisal) group by deptno; 

第二问:由题意分析出需要求解2个值deptno,avg(grade),平均 的薪水等级重心是等级,划分为小问题先求解每个员工薪水等级,从emp表联合salgrade表查询,条件是每个员工工资在losal和hisal之间,这样就求出了部门号和每个员工的工资等级,那么再求平均等级只需要avg函数,又题目求得是每个部门的工资等级,只需要分组即可,分组条件deptno。

注:此类题型注重对问题的解读,分析出求解几个值,再使用传统思路将大问题划分为若干小问题,由小及大解决即可。

                                                              2018-08-10  09:27:27

Oracle分组函数以及数据分组的更多相关文章

  1. MySQL聚合函数与数据分组

    我们最常需要的是汇总数据而不是把他们实际检索出来 确定表中行数(或满足某个条件或包含某个特定值的行数) 确定表中行组的和 找出表列(或所有行或特定列)的最大值,最小值和平均值 聚集函数是运行在行组上, ...

  2. oracle wm_concat函数 列转行 分组函数

    (1)select mark, wm_concat(status) from DISSENT_INFO t GROUP BY mark; 查出来的数据 mark     status 222      ...

  3. Oracle 分组函数

    分组函数的介绍 分组函数作用于一组数据,并对一组数据返回一个值. (引用网上的一张图) 分组函数的使用规则 SELECT [column,] group_function(column) FROM t ...

  4. Oracle学习笔记_05_分组函数

    组函数:avg  sum  max  min   count group by having group by 增强:rollup      cube     grouping      groupi ...

  5. mysql基础教程(二)-----分组函数、多表查询、常见函数

    分组函数 什么是分组函数 分组函数作用于一组数据,并对一组数据返回一个值. 组函数类型 • AVG() • COUNT() • MAX() • MIN() • SUM() 组函数语法 AVG(平均值) ...

  6. Oracle_SQL函数-分组函数

    分组函数 什么是分组函数 分组函数作用于一组数据,并对一组数据返回一个值 组函数类型:主要有6种 AVG - 平均 COUNT - 计数 MAX - 最大 MIN - 最小 SUM - 求和 STDD ...

  7. mysql分组函数与查询

    Ⅰ.分组函数的分类: max():最大值 min():最小值 sum():和 avg():平均值 count():计算非空的个数 这些都是通用的,sqlserver.oracle.mysql都是一样的 ...

  8. Mysql高手系列 - 第9篇:详解分组查询,mysql分组有大坑!

    这是Mysql系列第9篇. 环境:mysql5.7.25,cmd命令中进行演示. 本篇内容 分组查询语法 聚合函数 单字段分组 多字段分组 分组前筛选数据 分组后筛选数据 where和having的区 ...

  9. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

        花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...

随机推荐

  1. C++初始化列表和大括号中构造的差别

    C++的对象构造函数有两种初始化的方法: 1.初始化列表 2.大括号中面赋值 这两种推荐使用另外一种.原因在于使用初始化列表仅仅须要进行一次初始化.而使用大括号内赋值的话首先须要调用默认构造函数初始化 ...

  2. BFC是什么

    BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...

  3. spring boot测试工具(自带)

    启动spring boot 项目(一般是openapi) http://localhost:8888/swagger-ui.html 端口号可以自己配

  4. 王立平-- android:layout_weight

    效果: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQyNTUyNw==/font/5a6L5L2T/fontsize/400/fill/I0 ...

  5. Jacoco覆盖率工具使用调研

    JaCoCo Java Code Coverage Library Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以 ...

  6. 【Window OS】”对于目标文件系统,文件XXXXX过大“导致无法进行文件操作的解决方法

    问题原因:这是目标文件系统不支持这么大的文件的操作问题.例如:目标文件系统的格式是FAT32,FAT32最大支持4G,如果你要进行发送或粘贴4G以上的文件就会出现这个问题. 解决办法:把目标文件系统的 ...

  7. 读取Style符号库样式的方法

    以前进行符化的时候一般都是自定义Symbol,或者使用SymbologyControl进行选择,由于实际需要,我们来读取一下样式管理器中的样式.在ArcMap中打开如下:style下有很多样式类,每个 ...

  8. Python中的乱码

        我把写好的Python脚本导入到ArcGIS中的ToolBox中,在本机测试是没有问题的.为了把工具分享给其他人,即在其他电脑上使用,我必须将脚本文件(*.py)导入到工具箱文件(*.tbx) ...

  9. Setsockopt选项

    讨论 Setsockopt选项 http://c.chinaitlab.com/cc/ccjq/200806/752042_3.html 总而言之,如果你肯定能一起发送多个数据集合(例如HTTP响应的 ...

  10. mac 连接windows 共享内容

    mac 连接windows 共享内容 一:场景 在win7上下载了一个5G左右的系统文件,想弄到mac上,本打算用使用U盘,把文件从win7copy到mac电脑上: 可是U盘的分区是fat的,大于4G ...