`
wsql
  • 浏览: 11797184 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

[MSSQL]SQL SERVER 2005-OVER (PARTITION BY…)的用法

 
阅读更多

按字段进行排序
比如:
编号 InfoId, SeriesId,
11 a class_1
22 b class_1
33 c class_1
44 d class_2
55 e class_2
66 f class_2
... ... ...
-----------------------------
查询出来结果是这样
11 a class_1 1
22 b class_1 2
33 c class_1 3
44 d class_2 1
55 e class_2 2
66 f class_2 3
---------------------------------------------------------------
Select InfoId, SeriesId,
ROW_NUMBER() OVER(PARTITION BY SeriesId ORDER BY InfoId) AS ord
FROM [uc_QuotePrice] WITH (NOLOCK)
ORDER BY SeriesId,ord
---------------------------------------------------

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

铁观音-厂家直销

分享到:
评论

相关推荐

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

    partition by关键字是分析性函数的一部分,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,本文给大家介绍SQLServer中Partition By及row_number 函数使用详解,需要的朋友参考下

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

    主要介绍了Oracle查询中OVER (PARTITION BY ..)用法,内容和代码大家参考一下。

    Partition-Table-SQL-SERVER-2005.rar_partition

    Introduce the way to partition large SQL Table.

    Partition Table in MS SQL Server

    Partition Table in MS SQL Server

    分区数据恢复工具 7-Data Partition Recovery 1.9 中文多语免费版.zip

    该软件界面简洁大方,使用操作方便,免费是用来设计恢复数据丢失,删除或损坏的分区事故。同时还可以帮助恢复数据的硬盘驱动器崩溃时,MBR损坏,重新分区磁盘或分区(FDISK)覆盖等,希望对网友们有帮助。 分区数据...

    硬盘磁盘无损分区IMMagic Partition Resizer3.6绿色便携版

    譬如笔记本使用起来发现C盘空间快要满了,IM-Magic Partition Resizer 可以帮助您从其他分区调一些空间过来。 IM-Magic Partition Resizer是一款能在不需要格式化和重新安装系统的情况下,管理和调整用户的磁盘,...

    sqlserver 存储过程 函数 常用知识点

    简单的学习例子 sqlserver 存储过程、函数的创建和使用 和 常用知识点

    sqlserver巧用row_number和partition by分组取top数据

    这种查询在SQL Server 2005之前,写起来很繁琐,需要用到临时表关联查询才能取到。SQL Server 2005后之后,引入了row_number()函数,row_number()函数的分组排序功能使这种操作变得非常简单。下面是一个简单示例: ...

    springmvc+mybatis框架(wanwan-coco-partition)

    wanwan-coco-partition框架,极简框架用于测试spring框架是否可用

    leetcode提交超出时间限制-SQLServer-100DaysOfSQL:SQLServer-100DaysOfSQL

    外间隔时间限制SQLServer - SQL 100 天 连续挑战 100 天学习 SQL 语法,另外可以复习之外,也可以厘清很多不懂的地方。 第67天。 在 VScode 中更新代码片段 更新片段 第66天。 [LeetCode-#184] 部门最高工资 目的 ...

    partition by 使用说明

    partition by 使用说明

    程序员的SQL金典4-8

     9.3.4 CowNewSQL的使用方法 第10章 高级话题  10.1 SQL注入漏洞攻防  10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  ...

    SQL Server 2012 开窗函数

    废话不多说了,直接给大家贴代码了,具体代码如下所示: -- 开窗函数:在结果集的基础上进一步处理(聚合操作) ...-- Partition By 分组统计数量 -- 根据性别分组后,统计 SELECT COUNT(*) OVER ( PARTITION

    SqlServer 2005 T-SQL Query 学习笔记(2)

    ranking_function over([partition by col_list] order by col_list)   ROW_NUMBER:在排序的基础上对所有列进行连续的数字进行标识。 执行顺序:为了计算列值,优化器首先需要把数据在分区列上进行排序,然后在对...

    程序员的SQL金典6-8

     9.3.4 CowNewSQL的使用方法 第10章 高级话题  10.1 SQL注入漏洞攻防  10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  ...

    程序员的SQL金典7-8

     9.3.4 CowNewSQL的使用方法 第10章 高级话题  10.1 SQL注入漏洞攻防  10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  ...

    程序员的SQL金典3-8

     9.3.4 CowNewSQL的使用方法 第10章 高级话题  10.1 SQL注入漏洞攻防  10.1.1 SQL注入漏洞原理  10.1.2 过滤敏感字符  10.1.3 使用参数化SQL  10.2 SQL调优  10.2.1 SQL调优的基本原则  10.2.2 索引  ...

    EASEUS Partition Master 6.5.1 - Best Free Magic Partition Manager

    As Partition Magic alternative, EASEUS Partition Master freeware is an ALL-IN-ONE partition software and the most convenient hard disk partition manager toolkit including Partition Manager, Disk & ...

Global site tag (gtag.js) - Google Analytics