SQL*Plus break与compute的简单用法
在SQL*Plus提示符下输出求和报表,我们可以借助break与compute两个命令来实现。这个两个命令简单易用,可满足日常需求,其实质也相当于在编写SQL语句时使用分组及聚合函数。不同的是在报表中的分组的最下方或整个报表的最下方我们可以得到如sum,avg以及自定义的聚合字样。

一、break用法:
help break 
BREAK 
----- 
Specifies where changes occur in a report and the formatting 
action to perform, such as: 
- suppressing display of duplicate values for a given column 
- skipping a line each time a given column value changes 
(In iSQL*Plus, only when Preformatted Output is ON) 
- printing computed figures each time a given column value  changes or at the end of the report. 
Enter BREAK with no clauses to list the current BREAK definition. 
BRE[AK] [ON report_element [action [action]]] ... 
where report_element has the following syntax: 
{column | expression | ROW | REPORT} 
and where action has the following syntax: 
[SKI[P] n | [SKI[P]] PAGE] [NODUP[LICATES] | DUP[LICATES]] 
The SKIP option is not supported in iSQL*Plus 
b、命令特性描述 
break 命令主要用于过滤重复列,正如单词所表达的意思及中断,也就是说中断显示重复的列。 
当下一行记录的上指定的列与上一行相同,不显示该列,否则显示该列。 
当使用break时,通常建议sql语句使用Order by 子句。可以基于order by子句使用多个列,同样break 也可以使用多个列。 
report_element表明可以基于列,表达式,行,以及report等多种不同类型来进行中断显示,也就是说break on对哪个进行分组。 
action则表示 
skip[n],在每个分组的最后,自动跳过n个空行。 
skip page, 在每个分组的最后,自动换页。 
break on row skip[n],每一行后面跳过n个空行。 
nodup 重复的显示空,dup重复的也显示,不加该选项,默认就为nodup

SQL> conn scott/tiger@rhel201;
已连接。
SQL> show pagesize
pagesize
SQL> show linesize
linesize
SQL> select deptno,ename,sal from emp order by deptno; DEPTNO ENAME SAL
---------- ---------- ----------
CLARK
KING
MILLER
JONES
FORD
ADAMS
SMITH
SCOTT
WARD
TURNER
ALLEN
JAMES
BLAKE
MARTIN 已选择14行。 SQL> break on deptno --过滤重复的deptno内容,默认为nudup
SQL> break --查看当前的break设置信息
break on deptno nodup SQL> list
* select deptno,ename,sal from emp order by deptno
SQL> / DEPTNO ENAME SAL
---------- ---------- ----------
CLARK
KING
MILLER
JONES
FORD
ADAMS
SMITH
SCOTT
WARD
TURNER
ALLEN
JAMES
BLAKE
MARTIN 已选择14行。 SQL> break on deptno skip 1 --在每个分组后自动跳过1个空行
SQL> list
1* select deptno,ename,sal from emp order by deptno
SQL> / DEPTNO ENAME SAL
---------- ---------- ----------
CLARK
KING
MILLER JONES
FORD
ADAMS
SMITH
SCOTT WARD
TURNER
ALLEN
JAMES
BLAKE
MARTIN 已选择14行。 SQL> break on row skip 1 --基于row进行分组,且每行之后也跳过一行
SQL> / DEPTNO ENAME SAL
---------- ---------- ----------
CLARK KING MILLER JONES FORD ADAMS SMITH SCOTT WARD TURNER ALLEN JAMES BLAKE MARTIN 已选择14行。 SQL> SQL> show pagesize
pagesize
SQL> break on deptno skip page --基于页面进行跳页
SQL> / DEPTNO ENAME SAL
---------- ---------- ----------
CLARK
KING
MILLER DEPTNO ENAME SAL
---------- ---------- ----------
JONES
FORD
ADAMS
SMITH
SCOTT DEPTNO ENAME SAL
---------- ---------- ----------
WARD
TURNER
ALLEN
JAMES
BLAKE
MARTIN 已选择14行。 SQL>
SQL> break on deptno on job skip 1 --基于多列break
SQL> select deptno,ename,job,sal from emp order by deptno DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
CLARK MANAGER KING PRESIDENT MILLER CLERK JONES MANAGER DEPTNO ENAME JOB SAL
---------- ---------- --------- ---------- FORD ANALYST ADAMS CLERK
SMITH SCOTT ANALYST DEPTNO ENAME JOB SAL
---------- ---------- --------- ---------- WARD SALESMAN
TURNER
ALLEN JAMES CLERK DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
BLAKE MANAGER MARTIN SALESMAN

二、compute用法

help compute
COMPUTE
-------
In combination with the BREAK command, calculates and prints summary lines using various standard computations. Also lists 
all COMPUTE definitions.
COMP[UTE] [function [LAB[EL] text] ...
OF {expr|column|alias} ...
ON {expr|column|alias|REPORT|ROW} ...]
b、命令特性描述
compute用于分组值计算指定的列上的数值,实际上等同于对分组列执行group by,然后调用聚合函数。
function为常用的聚合函数,如sum,avg,maximum,minimum,std,count等等。
of为指定的计算列,也就是说要计算哪一列。
on为分组条件,基于哪个列,表达式,report,row等进行分组。
compute通常结合break来用,否则相当于没有分组,聚合也就没有任何意义。

SQL> clear break
breaks 已清除
SQL> break on deptno skip
SQL> compute sum of sal on deptno; --基于deptno对sal求和
SQL> select deptno,ename,job,sal from emp order by deptno; DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK
********** ----------
sum JONES MANAGER DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
FORD ANALYST
ADAMS CLERK
SMITH CLERK
SCOTT ANALYST
********** ----------
sum DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
WARD SALESMAN
TURNER SALESMAN
ALLEN SALESMAN
JAMES CLERK
BLAKE MANAGER
MARTIN SALESMAN
********** ---------- DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
sum 已选择14行。 SQL>
SQL> show pagesize
pagesize
SQL> break on report skip
SQL> compute sum of sal on report --基于整个report的sal进行求和
SQL> / DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK
JONES MANAGER
FORD ANALYST
ADAMS CLERK
SMITH CLERK DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
SCOTT ANALYST
WARD SALESMAN
TURNER SALESMAN
ALLEN SALESMAN
JAMES CLERK
BLAKE MANAGER
MARTIN SALESMAN DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
sum 已选择14行。 SQL> compute sum avg of sal on report ------对整个report求和以及求平均
SQL> / DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK
JONES MANAGER
FORD ANALYST
ADAMS CLERK
SMITH CLERK DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
SCOTT ANALYST
WARD SALESMAN
TURNER SALESMAN
ALLEN SALESMAN
JAMES CLERK
BLAKE MANAGER
MARTIN SALESMAN DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
----------
avg 2073.21429
sum 已选择14行。 SQL> SQL> compute sum avg of sal on deptno --对deptno分组进行求和,未平均值
SQL> clear break
breaks 已清除
SQL> break on deptno skip
SQL> list
* select deptno,ename,job,sal from emp order by deptno
SQL> / DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK
********** ----------
avg 2916.66667
sum DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
JONES MANAGER
FORD ANALYST
ADAMS CLERK
SMITH CLERK
SCOTT ANALYST
********** ----------
avg DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
sum WARD SALESMAN
TURNER SALESMAN
ALLEN SALESMAN
JAMES CLERK
BLAKE MANAGER DEPTNO ENAME JOB SAL
---------- ---------- --------- ----------
MARTIN SALESMAN
********** ----------
avg 1566.66667
sum 已选择14行。 SQL> SQL> break on deptno skip
SQL> compute sum of sal comm on deptno --对sal及comm基于分组deptno同时求和
SQL> select deptno,ename,sal,job,comm from emp order by deptno DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK
********** ---------- ----------
sum JONES MANAGER DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
FORD ANALYST
ADAMS CLERK
SMITH CLERK
SCOTT ANALYST
********** ---------- ----------
sum DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
WARD SALESMAN
TURNER SALESMAN
ALLEN SALESMAN
JAMES CLERK
BLAKE MANAGER
MARTIN SALESMAN
********** ---------- ---------- DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
sum 已选择14行。 SQL> SQL> compute sum avg of sal comm on deptno --基于dpetno,对sal和comm求和,求平均值
SQL> / DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK
********** ---------- ----------
avg 2916.66667
sum DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
JONES MANAGER
FORD ANALYST
ADAMS CLERK
SMITH CLERK
SCOTT ANALYST
********** ---------- ----------
avg DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
sum WARD SALESMAN
TURNER SALESMAN
ALLEN SALESMAN
JAMES CLERK
BLAKE MANAGER DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
MARTIN SALESMAN
********** ---------- ----------
avg 1566.66667
sum 已选择14行。 SQL> SQL> compute avg of sal on deptno --对sal列基于分组deptno求平均值
SQL> compute sum of comm on deptno --对comm列基于分组deptno求和
SQL> list
* select deptno,ename,sal,job,comm from emp order by deptno
SQL> / DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
CLARK MANAGER
KING PRESIDENT
MILLER CLERK
********** ---------- ----------
avg 2916.66667
sum DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
JONES MANAGER
FORD ANALYST
ADAMS CLERK
SMITH CLERK
SCOTT ANALYST
********** ---------- ----------
avg DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
sum WARD SALESMAN
TURNER SALESMAN
ALLEN SALESMAN
JAMES CLERK
BLAKE MANAGER DEPTNO ENAME SAL JOB COMM
---------- ---------- ---------- --------- ----------
MARTIN SALESMAN
********** ---------- ----------
avg 1566.66667
sum 已选择14行。 SQL>

SQL*Plus break与compute的简单用法的更多相关文章

  1. SQL Server中row_number函数的简单用法

    一.SQL Server Row_number函数简介   ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...

  2. SQL Server 中 with tmp 临时表的用法

    SQL Server 中 with tmp 临时表的用法 ----------with临时表用法,有时候采用临时表比采用in的效率更高,避免了全表扫描. 实例中实现了查询普通题.大题.子题目的sql ...

  3. JS的简单用法

    JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...

  4. slf4j的简单用法以及与log4j的区别

    之前在项目中用的日志记录器都是log4j的日志记录器,可是到了新公司发现都是slf4j,于是想着研究一下slf4j的用法. 注意:每次引入Logger的时候注意引入的jar包,因为有Logger的包太 ...

  5. python制作简单excel统计报表2之操作excel的模块openpyxl简单用法

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...

  6. Python网络编程之TCP套接字简单用法示例

    Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...

  7. MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】

    (第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...

  8. CATransition(os开发之画面切换) 的简单用法

    CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...

  9. jquery.validate.js 表单验证简单用法

    引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...

随机推荐

  1. 数据库的四种语言(DDL、DML、DCL、TCL)

    1.DDL (Data Definition Language )数据库定义语言 statements are used to define the database structure or sch ...

  2. javascript运动功能-分享到

    <script> //窗体载入,为div控件绑定事件 window.onload = function () { var div1 = document.getElementById('d ...

  3. 关于找工作(二 Cover Letter)

    准备好了简历,下一个文档就是cover letter了.其实对衡量你是否是一个好的候选人来说,cover letter的作用几乎是零(很多情况下主管技术工作的人或者雇人经理根本见不到cover let ...

  4. asp.net 页面上传文件控件后台代码Request.Files获取不到

    今天开发中遇到页面文件上传控件选择了文件,而后台Request.Files.Count取值为0,之前开发中遇到过几次,老是忘掉,今天记下来. html: <input type="fi ...

  5. COMException 依赖服务或组无法启动(0x8007042C)处理办法

    问题分析:这个问题主要原因是由于服务列表中的windows management instrumentation这个服务无法启动 问题解决办法: 点击屏幕左下角:开始-运行-输入regedit 打开注 ...

  6. kinect

    1.学习资料 http://blog.csdn.net/dustpg/article/details/37982311 https://github.com/mdkus/kinect-mssdk-op ...

  7. Mapper映射语句高阶应用——ResultMap

    resultMap 元素是MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事 情. ...

  8. SQL Server 2000/2005 分页SQL — 单条SQL语句

    有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标.本人不喜欢使用游标,我觉得它耗资.效率低:使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活.先看看单条 SQL ...

  9. C/C++语言学习——内存分配管理

    1.一个由C编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. ...

  10. python-Django环境搭建

    一例中python版本使用3.5版,通常来说linux自带的python都在2.6左右,所以3.5环境要自己编译安装python 第一部分:安装python3.5 001.解决依赖问题 yum -y ...