Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3902547
  • 博文数量: 534
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4800
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(534)

文章存档

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(253)

2006年(73)

分类: Oracle

2008-06-29 21:47:05

Oracle 语法之 OVER (PARTITION BY ..)

select * from test

数据:
A   B   C
1   1   1
1   2  2
1   3   3
2   2  5
3   4  6


---将B栏位值相同的对应的C 栏位值加总
select a,b,c, SUM(C)  OVER (PARTITION BY B) C_Sum
from test

A   B   C   C_SUM 
1 1 1 1
1 2 2 7
2 2 5 7
1 3 3 3
3 4 6 6



---如果不需要已某个栏位的值分割,那就要用 null

  eg:  就是将C的栏位值summary 放在每行后面

select a,b,c, SUM(C)  OVER (PARTITION BY null) C_Sum
from test

A   B   C   C_SUM 
1 1 1 17
1 2 2 17
1 3 3 17
2 2 5 17
3 4 6 17

this part from: http://www.itpub.net/324056.html
----------------
gan's practise:

SQL> select deptno,ename,job,sal from emp order by deptno;

    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
        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

14 rows selected.
SQL> @select_over.sql

    DEPTNO ENAME      JOB              SAL    SAL_PET
---------- ---------- --------- ---------- ----------
        10 CLARK      MANAGER         2450         28
        10 KING       PRESIDENT       5000 57.1428571
        10 MILLER     CLERK           1300 14.8571429
        20 JONES      MANAGER         2975 27.3563218
        20 FORD       ANALYST         3000 27.5862069
        20 ADAMS      CLERK           1100 10.1149425
        20 SMITH      CLERK            800 7.35632184
        20 SCOTT      ANALYST         3000 27.5862069
        30 WARD       SALESMAN        1250 13.2978723
        30 TURNER     SALESMAN        1500 15.9574468
        30 ALLEN      SALESMAN        1600 17.0212766
        30 JAMES      CLERK            950  10.106383
        30 BLAKE      MANAGER         2850 30.3191489
        30 MARTIN     SALESMAN        1250 13.2978723

14 rows selected.
SQL> l
  1  select deptno, ename, job, sal,
  2         (sal*100)/sum(sal) over (partition by deptno) sal_pet
  3* from emp


阅读(1777) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~