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/[email protected];
已连接。
SQL> show pagesize
pagesize 50
SQL> show linesize
linesize 150
SQL> select deptno,ename,sal from emp order by deptno;

    DEPTNO ENAME             SAL
---------- ---------- ----------
        10 CLARK            2450
        10 KING             5000
        10 MILLER           1300
        20 JONES            2975
        20 FORD             3000
        20 ADAMS            1100
        20 SMITH             800
        20 SCOTT            3000
        30 WARD             1250
        30 TURNER           1500
        30 ALLEN            1600
        30 JAMES             950
        30 BLAKE            2850
        30 MARTIN           1250

已选择14行。

SQL> break on deptno  --过滤重复的deptno内容,默认为nudup
SQL> break    --查看当前的break设置信息
break on deptno nodup

SQL> list
  1* select deptno,ename,sal from emp order by deptno
SQL> /

    DEPTNO ENAME             SAL
---------- ---------- ----------
        10 CLARK            2450
           KING             5000
           MILLER           1300
        20 JONES            2975
           FORD             3000
           ADAMS            1100
           SMITH             800
           SCOTT            3000
        30 WARD             1250
           TURNER           1500
           ALLEN            1600
           JAMES             950
           BLAKE            2850
           MARTIN           1250

已选择14行。

SQL> break on deptno skip 1   --在每个分组后自动跳过1个空行
SQL> list
  1* select deptno,ename,sal from emp order by deptno
SQL> /

    DEPTNO ENAME             SAL
---------- ---------- ----------
        10 CLARK            2450
           KING             5000
           MILLER           1300

        20 JONES            2975
           FORD             3000
           ADAMS            1100
           SMITH             800
           SCOTT            3000

        30 WARD             1250
           TURNER           1500
           ALLEN            1600
           JAMES             950
           BLAKE            2850
           MARTIN           1250

已选择14行。

SQL> break on row skip 1  --基于row进行分组,且每行之后也跳过一行
SQL> /

    DEPTNO ENAME             SAL
---------- ---------- ----------
        10 CLARK            2450

        10 KING             5000

        10 MILLER           1300

        20 JONES            2975

        20 FORD             3000

        20 ADAMS            1100

        20 SMITH             800

        20 SCOTT            3000

        30 WARD             1250

        30 TURNER           1500

        30 ALLEN            1600

        30 JAMES             950

        30 BLAKE            2850

        30 MARTIN           1250

已选择14行。

SQL>

SQL> show pagesize
pagesize 10
SQL> break on deptno skip page  --基于页面进行跳页
SQL> /

    DEPTNO ENAME             SAL
---------- ---------- ----------
        10 CLARK            2450
           KING             5000
           MILLER           1300

    DEPTNO ENAME             SAL
---------- ---------- ----------
        20 JONES            2975
           FORD             3000
           ADAMS            1100
           SMITH             800
           SCOTT            3000

    DEPTNO ENAME             SAL
---------- ---------- ----------
        30 WARD             1250
           TURNER           1500
           ALLEN            1600
           JAMES             950
           BLAKE            2850
           MARTIN           1250

已选择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
---------- ---------- --------- ----------
        10 CLARK      MANAGER         2450

           KING       PRESIDENT       5000

           MILLER     CLERK           1300

        20 JONES      MANAGER         2975

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------

        20 FORD       ANALYST         3000

           ADAMS      CLERK           1100
           SMITH                       800

           SCOTT      ANALYST         3000

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------

        30 WARD       SALESMAN        1250
           TURNER                     1500
           ALLEN                      1600

           JAMES      CLERK            950

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        30 BLAKE      MANAGER         2850

           MARTIN     SALESMAN        1250

二、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 1
SQL> compute sum of sal on deptno; --基于deptno对sal求和
SQL> select deptno,ename,job,sal from emp order by deptno;

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        10 CLARK      MANAGER         2450
           KING       PRESIDENT       5000
           MILLER     CLERK           1300
**********                      ----------
sum                                   8750

        20 JONES      MANAGER         2975

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        20 FORD       ANALYST         3000
           ADAMS      CLERK           1100
           SMITH      CLERK            800
           SCOTT      ANALYST         3000
**********                      ----------
sum                                  10875

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        30 WARD       SALESMAN        1250
           TURNER     SALESMAN        1500
           ALLEN      SALESMAN        1600
           JAMES      CLERK            950
           BLAKE      MANAGER         2850
           MARTIN     SALESMAN        1250
**********                      ----------

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
sum                                   9400

已选择14行。

SQL>
SQL> show pagesize
pagesize 10
SQL> break on report skip 1
SQL> compute sum of sal on report  --基于整个report的sal进行求和
SQL> /

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        10 CLARK      MANAGER         2450
        10 KING       PRESIDENT       5000
        10 MILLER     CLERK           1300
        20 JONES      MANAGER         2975
        20 FORD       ANALYST         3000
        20 ADAMS      CLERK           1100
        20 SMITH      CLERK            800

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        20 SCOTT      ANALYST         3000
        30 WARD       SALESMAN        1250
        30 TURNER     SALESMAN        1500
        30 ALLEN      SALESMAN        1600
        30 JAMES      CLERK            950
        30 BLAKE      MANAGER         2850
        30 MARTIN     SALESMAN        1250

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
sum                                  29025

已选择14行。

SQL> compute sum avg of sal on report   ------对整个report求和以及求平均
SQL> /

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        10 CLARK      MANAGER         2450
        10 KING       PRESIDENT       5000
        10 MILLER     CLERK           1300
        20 JONES      MANAGER         2975
        20 FORD       ANALYST         3000
        20 ADAMS      CLERK           1100
        20 SMITH      CLERK            800

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        20 SCOTT      ANALYST         3000
        30 WARD       SALESMAN        1250
        30 TURNER     SALESMAN        1500
        30 ALLEN      SALESMAN        1600
        30 JAMES      CLERK            950
        30 BLAKE      MANAGER         2850
        30 MARTIN     SALESMAN        1250

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
                                ----------
avg                             2073.21429
sum                                  29025

已选择14行。

SQL>

SQL> compute sum avg of sal on deptno   --对deptno分组进行求和,未平均值
SQL> clear break
breaks 已清除
SQL> break on deptno skip 1
SQL> list
  1* select deptno,ename,job,sal from emp order by deptno
SQL> /

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        10 CLARK      MANAGER         2450
           KING       PRESIDENT       5000
           MILLER     CLERK           1300
**********                      ----------
avg                             2916.66667
sum                                   8750

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        20 JONES      MANAGER         2975
           FORD       ANALYST         3000
           ADAMS      CLERK           1100
           SMITH      CLERK            800
           SCOTT      ANALYST         3000
**********                      ----------
avg                                   2175

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
sum                                  10875

        30 WARD       SALESMAN        1250
           TURNER     SALESMAN        1500
           ALLEN      SALESMAN        1600
           JAMES      CLERK            950
           BLAKE      MANAGER         2850

    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        30 MARTIN     SALESMAN        1250
**********                      ----------
avg                             1566.66667
sum                                   9400

已选择14行。

SQL>

SQL> break on deptno skip 1
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
---------- ---------- ---------- --------- ----------
        10 CLARK            2450 MANAGER          200
           KING             5000 PRESIDENT
           MILLER           1300 CLERK            100
**********            ----------           ----------
sum                         8750                  300

        20 JONES            2975 MANAGER

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
        20 FORD             3000 ANALYST
           ADAMS            1100 CLERK
           SMITH             800 CLERK            999
           SCOTT            3000 ANALYST
**********            ----------           ----------
sum                        10875                  999

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
        30 WARD             1250 SALESMAN         500
           TURNER           1500 SALESMAN           0
           ALLEN            1600 SALESMAN         300
           JAMES             950 CLERK
           BLAKE            2850 MANAGER
           MARTIN           1250 SALESMAN        1400
**********            ----------           ----------

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
sum                         9400                 2200

已选择14行。

SQL>

SQL> compute sum avg of sal comm on deptno   --基于dpetno,对sal和comm求和,求平均值
SQL> /

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
        10 CLARK            2450 MANAGER          200
           KING             5000 PRESIDENT
           MILLER           1300 CLERK            100
**********            ----------           ----------
avg                   2916.66667                  150
sum                         8750                  300

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
        20 JONES            2975 MANAGER
           FORD             3000 ANALYST
           ADAMS            1100 CLERK
           SMITH             800 CLERK            999
           SCOTT            3000 ANALYST
**********            ----------           ----------
avg                         2175                  999

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
sum                        10875                  999

        30 WARD             1250 SALESMAN         500
           TURNER           1500 SALESMAN           0
           ALLEN            1600 SALESMAN         300
           JAMES             950 CLERK
           BLAKE            2850 MANAGER

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
        30 MARTIN           1250 SALESMAN        1400
**********            ----------           ----------
avg                   1566.66667                  550
sum                         9400                 2200

已选择14行。

SQL>

SQL> compute avg of sal on deptno  --对sal列基于分组deptno求平均值
SQL> compute sum of comm on deptno  --对comm列基于分组deptno求和
SQL> list
  1* select deptno,ename,sal,job,comm from emp order by deptno
SQL> /

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
        10 CLARK            2450 MANAGER          200
           KING             5000 PRESIDENT
           MILLER           1300 CLERK            100
**********            ----------           ----------
avg                   2916.66667
sum                                               300

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
        20 JONES            2975 MANAGER
           FORD             3000 ANALYST
           ADAMS            1100 CLERK
           SMITH             800 CLERK            999
           SCOTT            3000 ANALYST
**********            ----------           ----------
avg                         2175

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
sum                                               999

        30 WARD             1250 SALESMAN         500
           TURNER           1500 SALESMAN           0
           ALLEN            1600 SALESMAN         300
           JAMES             950 CLERK
           BLAKE            2850 MANAGER

    DEPTNO ENAME             SAL JOB             COMM
---------- ---------- ---------- --------- ----------
        30 MARTIN           1250 SALESMAN        1400
**********            ----------           ----------
avg                   1566.66667
sum                                              2200

已选择14行。

SQL>
时间: 2024-10-27 10:46:36

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

Android WIFI 简单用法

随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了.例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话.可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi.下面就简单来说一下WifiManager的简单用法把. 权限: 为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限: //本例中使用了前两个.具体请按照需要添加权限. <uses-permission android:name=&quo

【android】Socket简单用法

原文地址:http://www.cnblogs.com/harrisonpc/archive/2011/03/31/2001565.html Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示.值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端.这是两个封装得非常好的类,使用起来很方便! 下面将首先创建一个SocketServer的类作为服务端如下,该服务端实现

第12章 剪贴板_12.1 剪贴板的简单用法

12.1 剪贴板的简单用法 12.1.1 剪贴板的标准格式 分类 标准格式 说明 文本格式 CF_TEXT 以NULL结尾的ANSI字符集,每行结尾含有回车换行符,最后的NULL表示整个数据的结束. CF_OEMTEXT 以NULL结尾的OEM字符集,供MS-DOS下的剪贴板使用 CF_UNICODETEXT 类似CF_TEXT,每行以回车换行结束,字符两个NULL标志着整个数据的结束. CF_SYLK 含有微软件符号链接(Symbolic Link)格式数据的内存块.用与Excel程序交换,是

android-service的简单用法

service是android开发中的四大组件之一,下面来介绍service的简单用法 1.需要新建一个service类,该类继承与service接口,需要实现onBind方法,这个方法之后介绍 2.创建intent对象,设置intent的目标为新建的service的类,启动service的方法有两种用startservice方法和bindservice方法 两种方法的不同在于startservice在启动服务之后,关闭当前的activity之后service还在系统后台运行 bindservi

Oracle Pivot简单用法

因为工作中经常需要excel或者报表输出,了解到pivot函数,查了部分资料,实在不够详尽,便想自己写一篇.pivot了解不深,只写写简单用法. table t{ c1,c2,c3,c4 } 有库表t,其中有字段c1,c2,c3,c4 select * from (select c1,c2,c3,c4 from t) pivot(func(c1) for c2 in (v1,v2,v3)) 其中func(c1)表示对c1使用func聚合函数 将输出的字段是c3,c4,v1,v2,v3,其中v1,

iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题

本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37  segmentfault-博客原文  http://segmentfault.com/blog/alan/1190000002411296 iOS的各种动画相漂亮,相信这是吸引很多人买iPhone的原因之一.不仅如此,这还是吸引我做iOS开发的一大原因,因为在iOS上给界面实现一些像样的动画实在是太轻松了! 这里就介绍一下iOS的block-based an

Android中资源文件中的字符串数组string-array简单用法

在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的strings.xml文件里,或是其他自定义的xml中都可以,以下操作方法相同. <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sports"> <item>足球<

expect简单用法

1 #!/usr/expect/bin/expect -f 2 3 4 set loginuser [lrange $argv 0 0] 5 set loginpass [lrange $argv 1 1] 6 set ipaddr [lrange $argv 2 2] 7 set port [lrange $argv 3 3] 8 set timeout [lrange $argv 4 4] 9 set from [lrange $argv 5 5] 10 set to [lrange $ar

Tcpdump 的简单用法

Tcpdump 的简单用法 tcpdump是Linux命令行下使用最广泛的网络分析工具,运行的时候会将网卡运行在混杂模式下,需要root权限才能执行 下面是几个比较常见的参数: -w  保持到指定的文件 -i  指定监听的网卡,缺省显示第一块网卡 -nn 以IP方式显示host -v  显示详细信息 -s  指定数据包大小,缺省是65535 -t  不显示时间 ,缺省是显示时间戳 -c  获取数据包数量,缺省不限制,需要用Ctrl+c来终止 下面是关于命令关键字的说明 1.主要包括host,ne