a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 113|回复: 2

[其他] Oracle认证:Oracle中over函数实例分析

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
情形:windows 2000 server + Oracle8.1.7 + sql*plus   目的:以oracle自带的scott模式为测试情形,首要经由过程试验体味剖析函数的用法。. ]4 N3 g( x, s3 T7 g+ ]+ K
  近似 sum(...) over ... 的使用
' c4 K( v! p3 J0 _: |' P+ Z% z  1.原表信息:- `) ?, z' _0 P2 A
  SQL> break on deptno skip 1   -- 为效不美观更较着,把分歧部门的数据隔段显示。+ j) g, w* X0 B# Q
  SQL> select deptno,ename,sal  ?/ I. j9 X/ u' v" _& U
  2   from emp1 a# i, c# K; u! k% B( R7 D
  3   order by deptno;( R- j) A$ {+ q3 B
  DEPTNO ENAME          SAL
3 @; b3 Q6 h0 u* h* i& G  ---------- ---------- ----------* }( M3 E4 _- v0 K$ Q# P  X
  10 CLARK          2450/ r; N  ^! R4 A, Q6 [
  KING          5000
  o9 G' _! U  n! c5 \+ t  MILLER           1300& s& w6 v0 v  E, q7 L/ V: L
  20 SMITH          800
( W4 P* @! V. L* I. q1 r  ADAMS          1100
4 e4 H) o7 r1 \: a9 f  FORD          3000
; L6 A3 T" y7 v  SCOTT          3000% w* S/ n/ a2 r
  JONES          29756 N4 L6 m6 @. S! v; ^, {2 C
  30 ALLEN          1600, A$ E+ V4 v0 X5 f9 D
  BLAKE          2850( o2 [  B. }7 p. g7 A- S- Z7 E
  MARTIN           1250# @6 S0 K5 f# s" y. \  V
  JAMES          9506 A2 b" O5 P2 o' l/ @& S/ y
  TURNER           1500( d- u, v+ b. F" k9 X. [# m  u$ T" {
  WARD          1250
" G, {' @% D6 s! k1 R2 Y: ?9 j" j* i/ i
  已选择14行。
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:07 | 显示全部楼层

Oracle认证:Oracle中over函数实例分析

</p>  2.先来一个简单的,注重over(...)前提的分歧,. K7 m1 p) s# d: O  o1 Y. U
  使用 sum(sal) over (order by ename)... 发芽员工的薪水“持续”乞降,4 f: j8 G9 [/ ?  I: w
  注重over (order   by ename)如不美观没有order by 子句,乞降就不是“持续”的,3 U' U+ B3 V1 \* T  t7 T
  放在一路,体味一下分歧之处:
2 V! [' J( l  z1 ]  SQL> break on '' -- 打瘦削据分段显示
* n2 L* Q8 [% X  SQL> select deptno,ename,sal,
: B9 k3 Z- c9 d) u; B/ B2 q  2   sum(sal) over (order by ename) 持续乞降,' g+ I/ n' c( R1 e! d
  3   sum(sal) over () 总和,                -- 此处sum(sal) over () 等同于sum(sal)
4 o6 W& E5 ?6 B  4   100*round(sal/sum(sal) over (),4) "份额(%)"- n& E' B3 v8 I. y7 B
  5   from emp
" q& d$ M# ^# T, h& O, S2 g  6   /
0 B$ a" f; }" h, Q/ R  DEPTNO ENAME          SAL 持续乞降    总和 份额(%)0 L' o5 d( H- }8 }" t& W
  ---------- ---------- ---------- ---------- ---------- ----------5 [' u% |5 c! b" m) c8 M; V
  20 ADAMS          1100    1100    29025    3.793 A  n  p( c6 Y- }, M. d! i
  30 ALLEN          1600    2700    29025    5.51
2 n( C) R/ `: M" F' ^  30 BLAKE          2850    5550    29025    9.82: P: h4 X, U- n! {) N% f0 u- c
  10 CLARK          2450    8000    29025    8.44& Z: _& C  k7 [$ X" {, c+ o. P" c
  20 FORD          3000    11000    29025    10.34
. D5 N( D0 n* j% w( U  30 JAMES          950    11950    29025    3.27
# v7 X# _4 g; G  20 JONES          2975    14925    29025    10.25( N! b6 E* X9 [1 g% d1 e) W/ x
  10 KING          5000    19925    29025    17.235 Y2 m* k9 p4 m4 o: q
  30 MARTIN           1250    21175    29025    4.31
" [7 @) G: f" A+ W4 w2 @  10 MILLER           1300    22475    29025    4.483 P9 K, O7 ^5 a, M9 Q$ ~
  20 SCOTT          3000    25475    29025    10.340 t9 F( e$ Q, a& r! F+ `7 c, d" w
  20 SMITH          800    26275    29025    2.76
+ F& a, W# f  d  30 TURNER           1500    27775    29025    5.17
5 Y$ K+ [6 \' t, B! s/ z  30 WARD          1250    29025    29025    4.31
/ s' p- X- v9 ~) j4 A* E$ q2 @5 ^& K: P2 \" C( o" r! ~1 f. e
  已选择14行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:08 | 显示全部楼层

Oracle认证:Oracle中over函数实例分析

</p>  3.使用子分区查出各部门薪水持续的总和。注重按部门分区。注重over(...)前提的分歧,
7 g- b, w2 g* Y. g7 [  sum(sal) over (partition by deptno order by ename) 按部门“持续”求总和9 \" x7 W2 b$ m; V3 ]$ y# t  Y0 w
  sum(sal) over (partition by deptno) 按部门求总和
( w. H) M# S5 x$ u* Q" W  sum(sal) over (order by deptno,ename) 不按部门“持续”求总和3 r" ^* ~! u  m4 R
  sum(sal) over () 不按部门,求所有员工总和,效不美观等同于sum(sal)。
" Q: X; Y" O7 ?# [; G- a  SQL> break on deptno skip 1   -- 为效不美观更较着,把分歧部门的数据隔段显示。+ p  _  u) G4 G8 v- D7 m
  SQL> select deptno,ename,sal,
8 L' b' r6 O8 v# Z) U  2   sum(sal) over (partition by deptno order by ename) 部门持续乞降,--各部门的薪水"持续"乞降
; q$ @/ d' m% d# L  3   sum(sal) over (partition by deptno) 部门总和,   -- 部门统计的总和,统一部门总和不变
2 p/ x% k0 q# q9 `: q' X0 U; f  4   100*round(sal/sum(sal) over (partition by deptno),4) "部门份额(%)",
- n( |/ g3 K$ o/ \0 v  w  5   sum(sal) over (order by deptno,ename) 持续乞降, --所有部门的薪水"持续"乞降1 H; `" J* `3 Z2 u9 Y, V0 h: G
  6   sum(sal) over () 总和,   -- 此处sum(sal) over () 等同于sum(sal),所有员工的薪水总和
( u) {% V, [1 u! e3 b  7   100*round(sal/sum(sal) over (),4) "总份额(%)") F1 H8 m8 l" y2 e" C' a+ K4 g
  8   from emp
/ O+ k& B5 I0 U5 D. X8 W0 A  9   /
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 18:43 , Processed in 0.164143 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表