动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.Oracle数据库性能优化技术.
.数据挖掘概述(一).
.手工建库脚本.
.TestKing Oracle 1Z0-033 Edt19.0.
.Oracle 8高级数据复制技术.
.[Oracle 10g] 大文件表空间.
.在ORACLE里设置访问多个SQL数据库.
.Oracle多个远程输入验证漏洞.
.案例学习Oracle错误:ORA-29516.
.移动数据库和J2ME工具构建应用程.
.如何在Oracle中实现时间相加处理.
.INTELP4安装ORACLE8I的具体解决方.
.Oracle 8i新增功能.
.在 Oracle 中编写的树级代码分享.
.让数据围着银行转.
.Oracle监控数据库性能的SQL汇总.
.Oracle触发器详细介绍.
.怎么样把man手册的内容保存到某个.
.Oracle简化企业网格运算环境管理.
.Oracle数据库技术(42).

Oracle分析函数学习笔记3

发表日期:2008-2-9 |


环境:windows 2000 server + Oracle8.1.7 + sql*plus 目的:以oracle自带的scott模式为测试环境,主要通过试验体会分析函数的用法。 类似 sum(...) over ... 的使用
1.原表信息: SQL> break on deptno skip 1  -- 为效果更明显,把不同部门的数据隔段显示。
SQL> select deptno,ename,sal
  2  from emp
  3  order by deptno;     DEPTNO ENAME             SAL
---------- ---------- ----------
        10 CLARK            2450
           KING             5000
           MILLER           1300         20 SMITH             800
           ADAMS            1100
           FORD             3000
           SCOTT            3000
           JONES            2975         30 ALLEN            1600
           BLAKE            2850
           MARTIN           1250
           JAMES             950
           TURNER           1500
           WARD             1250
已选择14行。   2.先来一个简单的,注重over(...)条件的不同,
使用 sum(sal) over (order by ename)... 查询员工的薪水“连续”求和,
注重over (order  by ename)假如没有order by 子句,求和就不是“连续”的,
放在一起,体会一下不同之处: SQL> break on '' -- 取消数据分段显示
SQL> select deptno,ename,sal,
  2  sum(sal) over (order by ename) 连续求和,
  3  sum(sal) over () 总和,                  -- 此处sum(sal) over () 等同于sum(sal)

  4  100*round(sal/sum(sal) over (),4) "份额(%)"
  5  from emp
  6  /     DEPTNO ENAME             SAL   连续求和       总和    份额(%)
---------- ---------- ---------- ---------- ---------- ----------
        20 ADAMS            1100       1100      29025       3.79
        30 ALLEN            1600       2700      29025       5.51
        30 BLAKE            2850       5550      29025       9.82
        10 CLARK            2450       8000      29025       8.44
        20 FORD             3000      11000      29025      10.34
        30 JAMES             950      11950      29025       3.27
        20 JONES            2975      14925      29025      10.25
        10 KING             5000      19925      29025      17.23
        30 MARTIN           1250      21175      29025       4.31
        10 MILLER           1300      22475      29025       4.48
        20 SCOTT            3000      25475      29025      10.34

        20 SMITH             800      26275      29025       2.76
        30 TURNER           1500      27775      29025       5.17
        30 WARD             1250      29025      29025       4.31 已选择14行。
3.使用子分区查出各部门薪水连续的总和。注重按部门分区。注重over(...)条件的不同,
sum(sal) over (partition by deptno order by ename) 按部门“连续”求总和
sum(sal) over (partition by deptno) 按部门求总和
sum(sal) over (order by deptno,ename) 不按部门“连续”求总和
sum(sal) over () 不按部门,求所有员工总和,效果等同于sum(sal)。 SQL> break on deptno skip 1  -- 为效果更明显,把不同部门的数据隔段显示。
SQL> select deptno,ename,sal,
  2  sum(sal) over (partition by deptno order by ename) 部门连续求和,--各部门的薪水"连续"求和
  3  sum(sal) over (partition by deptno) 部门总和,  -- 部门统计的总和,同一部门总和不变
  4  100*round(sal/sum(sal) over (partition by deptno),4) "部门份额(%)",
  5  sum(sal) over (order by deptno,ename) 连续求和, --所有部门的薪水"连续"求和
  6  sum(sal) over () 总和,  -- 此处sum(sal) over () 等同于sum(sal),所有员工的薪水总和
  7  100*round(sal/sum(sal) over (),4) "总份额(%)"
  8  from emp
  9  / DEPTNO ENAME    SAL 部门连续求和   部门总和 部门份额(%)   连续求和   总和  总份额(%)
------ ------ ----- ------------ ---------- ----------- ---------- ------ ----------
    10 CLARK   2450         2450       8750          28       2450  29025       8.44
       KING    5000         7450       8750       57.14       7450  29025      17.23
       MILLER  1300         8750       8750       14.86       8750  29025       4.48     20 ADAMS   1100         1100      10875       10.11       9850  29025       3.79

       FORD    3000         4100      10875       27.59      12850  29025      10.34
       JONES   2975         7075      10875       27.36      15825  29025      10.25
       SCOTT   3000        10075      10875       27.59      18825  29025      10.34
       SMITH    800        10875      10875        7.36      19625  29025       2.76     30 ALLEN   1600         1600       9400       17.02      21225  29025       5.51
       BLAKE   2850         4450       9400       30.32      24075  29025       9.82
       JAMES    950         5400       9400       10.11      25025  29025       3.27
       MARTIN  1250         6650       9400        13.3      26275  29025       4.31
       TURNER  1500         8150       9400       15.96      27775  29025       5.17
       WARD    1250         9400       9400        13.3      29025  29025       4.31
已选择14行。   4.来一个综合的例子,求和规则有按部门分区的,有不分区的例子
SQL> select deptno,ename,sal,sum(sal) over (partition by deptno order by sal) dept_sum,

  2  sum(sal) over (order by deptno,sal) sum
  3  from emp;     DEPTNO ENAME             SAL   DEPT_SUM        SUM
---------- ---------- ---------- ---------- ----------
        10 MILLER           1300       1300       1300
           CLARK            2450       3750       3750
           KING             5000       8750       8750         20 SMITH             800        800       9550
           ADAMS            1100       1900      10650
           JONES            2975       4875      13625
           SCOTT            3000      10875      19625
           FORD             3000      10875      19625         30 JAMES             950        950      20575
           WARD             1250       3450      23075
           MARTIN           1250       3450      23075
           TURNER           1500       4950      24575
           ALLEN            1600       6550      26175

           BLAKE            2850       9400      29025
已选择14行。   5.来一个逆序的,即部门从大到小排列,部门里各员工的薪水从高到低排列,累计和的规则不变。 SQL> select deptno,ename,sal,
  2  sum(sal) over (partition by deptno order by deptno desc,sal desc) dept_sum,
  3  sum(sal) over (order by deptno desc,sal desc) sum
  4  from emp;     DEPTNO ENAME             SAL   DEPT_SUM        SUM
---------- ---------- ---------- ---------- ----------
        30 BLAKE            2850       2850       2850
           ALLEN            1600       4450       4450
           TURNER           1500       5950       5950
           WARD             1250       8450       8450
           MARTIN           1250       8450       8450
           JAMES             950       9400       9400         20 SCOTT            3000       6000      15400
           FORD             3000       6000      15400
           JONES            2975       8975      18375
           ADAMS            1100      10075      19475
           SMITH             800      10875      20275         10 KING             5000       5000      25275

           CLARK            2450       7450      27725
           MILLER           1300       8750      29025
已选择14行。   6.体会:在"... from emp;"后面不要加order  by 子句,使用的分析函数的(partition by deptno order by sal)
里已经有排序的语句了,假如再在句尾添加排序子句,一致倒罢了,不一致,结果就令人费劲了。如: SQL> select deptno,ename,sal,sum(sal) over (partition by deptno order by sal) dept_sum,
  2  sum(sal) over (order by deptno,sal) sum
  3  from emp
  4  order by deptno desc;     DEPTNO ENAME             SAL   DEPT_SUM        SUM
---------- ---------- ---------- ---------- ----------
        30 JAMES             950        950      20575
           WARD             1250       3450      23075
           MARTIN           1250       3450      23075
           TURNER           1500       4950      24575
           ALLEN            1600       6550      26175
           BLAKE            2850       9400      29025         20 SMITH             800        800       9550
           ADAMS            1100       1900      10650
           JONES            2975       4875      13625

           SCOTT            3000      10875      19625
           FORD             3000      10875      19625         10 MILLER           1300       1300       1300
           CLARK            2450       3750       3750
           KING             5000       8750       8750
已选择14行。

上一篇:Oracle 学习过程中的笔记以及几个问题 人气:635
下一篇:小议在Oracle中索引的使用 人气:1389
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-2 OpenPNE中文 v2.12.5 for win 中
2008-12-2 谷秋精品课程软件课程版 v2.3
2008-12-2 晴天电影系统(带一键迅雷/自定义
2008-12-2 QQip138闪字程序
2008-12-2 SmartWeb企业智能建站系统 v1.0.2
2008-12-2 梦想不死个人主页 v2009
2008-12-2 开良ASP小偷程序生成器 v1.1
2008-12-2 toolxp.cnalexa世界排名查询 php
2008-12-2 腾讯留言板 v1.3
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号