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. [Git] --no-verify

    Somtimes, the project might set the commit message guide line, if your commit doesn't meet the requi ...

  2. Android应用切换皮肤功能实现

    原文地址:http://www.eoeandroid.com/thread-318159-1-1.html 现在大多数android应用都支持切换皮肤的功能.比如千千静听,墨迹天气等等.本文介绍两种切 ...

  3. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  4. ASP.NET开发学习视频教程大全(共800集)

    ASP.NET是微软.NET平台的支柱之一,被广泛应用在WEB等互联网开发领域,因此它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上.这里整理了最全的ASP.NET开发学习视频 ...

  5. iOS开发 ~应用程序设计理念:视图控制器(UIViewController)、视图(UIView)

    应用程序设计理念:视图控制器(UIViewController).视图(UIView) 利用视图控制器(底层)管理视图(外观),一对一 1.视图的作用:负责显示的外观 2.视图控制器的作用:创建界面. ...

  6. Java坑一

    public class Test { public static void main(String[] args) { Integer a = 12; Integer b = 12; System. ...

  7. String()与toString()区别和应用

    首先,String()和toString()方法都是将其它类型的变量转换为字符串的方法.但两者存在一定的区别: x.toString(): 无法转换null和undefined: 来看下面的小例子: ...

  8. php对数组中指定键值排序

    function array_sort($arr,$keys,$type='asc'){ $keysvalue = $new_array = array(); foreach ($arr as $k= ...

  9. js控制浏览器后退

    <script type="text/javascript"> window.history.forward(1); </script>

  10. ruby更换为淘宝的源

    我们在使用gem更新的时候,经常会为速度抓狂,其实gem默认的源是https://rubygems.org,比较慢众所周至的原因了. 可以将源更换到国内的taobao源 查看当前有的源 gem sou ...