SQL*Plus break与compute的简单用法
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的简单用法的更多相关文章
- SQL Server中row_number函数的简单用法
一.SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数,它为结果集的分区中的每一行分配一个连续的整数. 行号以每个分区中第一行的行号开头. 以下是R ...
- SQL Server 中 with tmp 临时表的用法
SQL Server 中 with tmp 临时表的用法 ----------with临时表用法,有时候采用临时表比采用in的效率更高,避免了全表扫描. 实例中实现了查询普通题.大题.子题目的sql ...
- JS的简单用法
JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...
- slf4j的简单用法以及与log4j的区别
之前在项目中用的日志记录器都是log4j的日志记录器,可是到了新公司发现都是slf4j,于是想着研究一下slf4j的用法. 注意:每次引入Logger的时候注意引入的jar包,因为有Logger的包太 ...
- python制作简单excel统计报表2之操作excel的模块openpyxl简单用法
python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...
- Python网络编程之TCP套接字简单用法示例
Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...
- MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】
(第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...
- jquery.validate.js 表单验证简单用法
引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...
随机推荐
- 实现Android操作系统11种传感器介绍
在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用. #define SENSOR_TYPE_ACCELEROMETER 1 //加速度 #define ...
- thinkphp框架的路径问题 - 总结
thinkphp框架的路径问题 - 总结 (2011-06-21 11:01:28) 转载▼ 标签: thinkphp 框架 路径 杂谈 分类: Php TP中有不少路径的便捷使用方法,比如模板中使用 ...
- 仿桌面通知pnotify插件
在做网站的时候,alert弹出框是非常常见的情形.但是,有些情况下,弹框对用户来说是并不友好的.调研了几个其他的提示插件了,发现pnotify比较好用,可配置性也高. 使用示例: <!DOCTY ...
- 关于bxslider在点击左右按钮之后不能自动切换的问题解决
bxslider很好,但是也弄了个很脑残的设置,每次点击左右按钮之后,就不能自动切换了,要重新点击下方播放的按钮,相当不好用.问度娘没能解决,但是发现一个论坛说要修改源码,这个也找了好久,没找到,问群 ...
- Win8.1系统下安装nodeJS
Nodejs简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.js ...
- 数值的N次方
问题描述: 实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数, 同时不需考虑大数问题. 思路分析: 要是你秒秒钟想 ...
- [置顶] highcharts封装使用总结
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.目前High ...
- gerrit升级到16.04之后连接不到服务器
升级到ubuntu-16.04后,发现Git-review代码报错: Unable to negotiate with 10.140.110.77 port 29418: no matching ke ...
- CI(CodeIgniter)学习第二讲
一.CI的文件结构: 了解CI的文件结构可以帮助我们快速的对CI框架有一个整体的认识,就好像我们去了一个陌生的城市一样,对你来讲周围的一切都是陌生和未知的,要想快速的了解这座城市,你可以买一张这座城市 ...
- Js验证 :只能输入数字和小数点 验证是否是数字 js取float型小数点后两位
JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入)<input onkeyup="this.value=this.value.replace(/\D/g,'') ...