`
Copperfield
  • 浏览: 260226 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
C407adc3-512e-3a03-a056-ce4607c3a3c0
java并发编程陷阱
浏览量:25137
社区版块
存档分类

OVER (PARTITION BY…)的用法

 
阅读更多

OVER (PARTITION BY…) 按照某列分割/区分

SELECT EMP.*,SUM(SAL) OVER(PARTITION BY DEPTNO) 本部门工资总和 FROM EMP

   deptno  ename     sal    本部门工资总和

1       10     CLARK     2450.00      8750

2       10     KING        5000.00      8750

3       10     MILLER    1300.00      8750

4       20     SMITH      800.00        10875

5       20     ADAMS    1100.00      10875

6       20     FORD        3000.00      10875

7       20     SCOTT      3000.00      10875

8       20     JONES       2975.00      10875

9       30     ALLEN      1600.00      9400

10     30     BLAKE     2850.00      9400

11     30     MARTIN  1250.00      9400

12     30     JAMES      950.00        9400

13     30     TURNER  1500.00      9400

14     30     WARD       1250.00      9400

DEPTNO列列值相同的对应的sal加和

 

如果不需要已某个列的值分割,那就要用null,因为没有分割列,所以“工资总和”的值为所有sal列的值的和

SELECT EMP.*,SUM(SAL) OVER(PARTITION BY DEPTNO) 工资总和 FROM EMP

1       10     CLARK     2450.00      29025

2       10     KING        5000.00      29025

3       10     MILLER    1300.00      29025

4       20     SMITH      800.00        29025

5       20     ADAMS    1100.00      29025

6       20     FORD        3000.00      29025

7       20     SCOTT      3000.00      29025

8       20     JONES       2975.00      29025

9       30     ALLEN      1600.00      29025

10     30     BLAKE     2850.00      29025

11     30     MARTIN  1250.00      29025

12     30     JAMES      950.00        29025

13     30     TURNER  1500.00      29025

14     30     WARD       1250.00      29025

 

使用 sum(sal) over (order by ename)... 查询员工的薪水"连续"求和

SELECT EMP.*,SUM(SAL) OVER(ORDER BY ENAME) 按姓名排序后连续求和,100*ROUND(SAL/SUM(SAL) OVER (),4) "份额(%)" FROM EMP

1       20     ADAMS    1100.00      1100 3.79

2       30     ALLEN      1600.00      2700 5.51

3       30     BLAKE     2850.00      5550 9.82

4       10     CLARK     2450.00      8000 8.44

5       20     FORD        3000.00      11000         10.34

6       30     JAMES      950.00        11950         3.27

7       20     JONES       2975.00      14925         10.25

8       10     KING        5000.00      19925         17.23

9       30     MARTIN  1250.00      21175         4.31

10     10     MILLER    1300.00      22475         4.48

11     20     SCOTT      3000.00      25475         10.34

12     20     SMITH      800.00        26275         2.76

13     30     TURNER  1500.00      27775         5.17

14     30     WARD       1250.00      29025         4.31

 

SELECT EMP.*,SUM(SAL) OVER (PARTITION BY DEPTNO ORDER BY ENAME) 按照部门连续求总和 FROM EMP

1       10     CLARK     2450.00    2450

2       10     KING         5000.00    7450

3       10     MILLER    1300.00    8750

4       20     ADAMS     1100.00    1100

5       20     FORD       3000.00    4100

6       20     JONES     2975.00    7075

7       20     SCOTT     3000.00    10075

8       20     SMITH       800.00      10875

9       30     ALLEN      1600.00    1600

10     30     BLAKE      2850.00    4450

11     30     JAMES      950.00      5400

12     30     MARTIN    1250.00    6650

13     30     TURNER  1500.00    8150

14     30     WARD       1250.00    9400


SELECT EMP.*,SUM(SAL) OVER (ORDER BY DEPTNO,ENAME)
所有部门连续求总和 FROM EMP

1       10     CLARK     2450.00    2450

2       10     KING         5000.00    7450

3       10     MILLER    1300.00    8750

4       20     ADAMS     1100.00    9850

5       20     FORD       3000.00    12850

6       20     JONES     2975.00    15825

7       20     SCOTT     3000.00    18825

8       20     SMITH       800.00      19625

9       30     ALLEN      1600.00    21225

10     30     BLAKE      2850.00    24075

11     30     JAMES      950.00      25025

12     30     MARTIN    1250.00    26275

13     30     TURNER  1500.00    27775

14     30     WARD       1250.00    29025
sum(sal) over ()
不按部门,求所有员工总和,效果等同于sum(sal)

 

部门从大到小排列,部门里各员工的薪水从高到低排列

SELECT DEPTNO,ENAME,SAL,SUM(SAL) OVER(PARTITION BY DEPTNO ORDER BY DEPTNO DESC, SAL DESC) DEPT_SUM,

SUM(SAL) OVER(ORDER BY DEPTNO DESC, SAL DESC) SUM FROM EMP;

1       30     BLAKE     2850.00      2850 2850

2       30     ALLEN      1600.00      4450 4450

3       30     TURNER  1500.00      5950 5950

4       30     MARTIN   1250.00      8450 8450

5       30     WARD       1250.00      8450 8450

6       30     JAMES      950.00        9400 9400

7       20     FORD       3000.00      6000 15400

8       20     SCOTT    3000.00      6000 15400

9       20     JONES       2975.00      8975 18375

10     20     ADAMS    1100.00      10075         19475

11     20     SMITH      800.00        10875         20275

12     10     KING        5000.00      5000 25275

13     10     CLARK     2450.00      7450 27725

14     10     MILLER    1300.00      8750 29025

分享到:
评论

相关推荐

    Oracle查询中OVER (PARTITION BY ..)用法

    Oracle查询中的`OVER (PARTITION BY ..)`是一个窗口函数,它允许我们在数据集上执行计算,但不是在整个结果集上,而是针对每个分区。这部分功能非常强大,可以用于复杂的分析和排序任务,尤其是在处理分组数据时。在...

    SQLServer中Partition By及row_number 函数使用详解

    本文将详细讲解这两个函数的使用方法及其在实际场景中的应用。 `PARTITION BY` 关键字是分析函数的一个关键组成部分,它的主要作用是对结果集进行分组。在没有指定的情况下,`PARTITION BY` 将默认对整个结果集进行...

    Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数(转载)

    #### 三、OVER (PARTITION BY ..) 的使用方法 ##### 1. 分区概述 `OVER (PARTITION BY ...)` 的主要作用是定义一个分区集合,即对数据进行分组,然后在每个分区内执行相应的操作。例如,在以下示例中,我们根据 `...

    partition by 使用说明

    在本文中,我们将详细介绍 Partition By 函数的使用方法和示例。 Partition By 函数的基本语法 --------------------------- Partition By 函数的基本语法如下所示: ``` SELECT *, ROW_NUMBER() OVER ...

    row_number,根据多个字段过滤,partition by

    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY name || idNumber || TO_CHAR(date, 'YYYYMMDD') ORDER BY id) AS rn FROM teacher t ) subquery WHERE rn = 1; ``` - **PARTITION BY** 子句中的`name || idNumber...

    Oracle中rank,over partition函数的使用方法

    `SUM(SAL) OVER (PARTITION BY DEPTNO ORDER BY ENAME)` 是按部门和员工名字累加薪水,`SUM(SAL) OVER (PARTITION BY DEPTNO)` 是计算部门内的总薪水,而 `SUM(SAL) OVER (PARTITION BY DEPTNO ORDER BY SAL)` 是按...

    详解partition by和group by对比

    在SQL查询中,`GROUP BY` 和 `PARTITION BY` 都是用来处理数据分组的,但它们在功能和使用场景上有所不同。...因此,熟练掌握 `GROUP BY` 和 `PARTITION BY` 的用法对于数据库开发者来说至关重要。

    只满足某个条件的查询效率分析

    介绍了 1.NOT EXISTS, 2.GROUP BY ... [HAVING ...] 3.count(*) over(partition by ...) 做查询的效率,以及各自的使用方法

    over函数的使用

    ### over函数概述 在数据库查询语言SQL中,`over`函数是处理复杂数据分析的一个强大工具。...理解并掌握这些函数的使用方法对于提高数据分析能力至关重要。希望以上内容能帮助您更好地理解和应用这些强大的SQL特性。

    ROW_NUMBER() OVER函数的基本用法

    ROW_NUMBER() OVER 函数的基本用法 ROW_NUMBER() OVER 函数是 SQL Server 中的一个窗口函数,用于对查询结果进行编号。该函数可以根据指定的列进行分组和排序,并为每一组记录返回一个唯一的编号。 语法: ROW_...

    Orcal中over函数.doc

    - **部门连续求和**:`SUM(sal) OVER (PARTITION BY deptno ORDER BY ename)`表示按照部门进行分组后,再按`ename`排序对薪资进行连续累加。 - **部门总和**:`SUM(sal) OVER (PARTITION BY deptno)`表示计算每个...

    ORACLE_OVER函数

    ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS row_num FROM employees; ``` 这个查询将为每个部门的员工按工资降序排列,并为每个员工分配一个行号。 ##### 示例2:使用SUM()计算...

    oracle分析函数row_number() over()使用

    下面我们将详细讨论`ROW_NUMBER() OVER()`的使用方法及其在不同场景下的应用。 首先,`ROW_NUMBER() OVER()`的基本语法是: ```sql ROW_NUMBER() OVER ( [PARTITION BY column1, column2, ...] ORDER BY column3...

    mysql代码-查询每天前三条数据 按照交易价格大到小排序 相当于模拟Oracle Row_Number() OVER (partition by date ORDER BY pay desc)

    首先,`ROW_NUMBER() OVER (PARTITION BY date ORDER BY pay DESC)`是Oracle SQL中的一个窗口函数表达式,它会为每个`date`分区内的数据行分配一个行号,按照`pay`列的降序排列。这意味着在每一天内,交易价格最高的...

    使用over函数实现递归汇总计算

    SUM(salary) OVER (PARTITION BY manager_id ORDER BY salary RANGE UNBOUNDED PRECEDING) AS l_csum FROM employees WHERE manager_id IN (101, 103, 108); ``` 此查询将按照不同的经理分组,并根据薪水从小到大...

    oracle分组排序统计高级用法

    RANK() OVER (PARTITION BY <column_list> ORDER BY ) ``` - **示例**: 假设有表`students`包含学生姓名`name`、学科`subject`和成绩`score`,我们想要找出每个学科的前三名成绩。 ```sql SELECT name, ...

    Oracle开发的over函数

    接下来,我们将详细介绍Oracle中的分析函数及其使用方法。 #### 二、Oracle分析函数简单实例 为了更好地理解Oracle分析函数的作用,我们先来看一个简单的示例。假设有一个员工表EMPLOYEE,其中包含员工ID(EMP_ID...

    hive开窗函数详细介绍

    SELECT cookieid, createtime, pv, ROW_NUMBER() OVER(PARTITION BY cookieid ORDER BY pv DESC) AS rn FROM it_t1; ``` 这将为每个cookieid分组的记录按pv值降序分配一个行号。 2. RANK()与DENSE_RANK() RANK()和...

Global site tag (gtag.js) - Google Analytics