SQL Server 2012 - 开窗函数

-- 开窗函数:在结果集的基础上进一步处理(聚合操作)

-- Over函数,添加一个字段显示最大年龄
SELECT  * ,
        MAX(StuAge) OVER ( ) MaxStuAge
FROM    dbo.Student;

-- Over函数,添加一个字段显示总人数
SELECT  * ,
        COUNT(StuID) OVER ( ) StuCount
FROM    dbo.Student;

-- Partition By 分组统计数量
-- 根据性别分组后,统计
SELECT  COUNT(*) OVER ( PARTITION   BY StuSex ) ,
        *
FROM    dbo.Student; 

-- 根据班级分组后,统计、排序
SELECT  COUNT(*) OVER ( PARTITION   BY Class ORDER BY Height) ,
        *
FROM    dbo.Student; 

-- Over函数,添加一个字段显示平均身高
SELECT  * ,
        AVG(Height) OVER ( ) AgeHeight
FROM    dbo.Student;

--Row_Rumber()
SELECT  ROW_NUMBER() OVER ( ORDER BY StuID DESC ) RowNumber ,
        *
FROM    dbo.Student 

--Row_Rumber() 实现分页效果
;
WITH    T AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY StuID DESC ) RowNumber ,
                        *
               FROM     dbo.Student
             )
    SELECT  *
    FROM    T
    WHERE   T.RowNumber BETWEEN 1 AND 3;

--Rank() 排名函数,名次相同,跳过
SELECT  RANK() OVER ( ORDER BY Height ) ,
        *
FROM    dbo.Student;

--DENSE_Rank() 排名函数,名次相同不跳过
SELECT  DENSE_RANK() OVER ( ORDER BY Height ) ,
        *
FROM    dbo.Student;

-- NTILE()函数,参数:记录总数/划分区域 = 每个区域数组,把记录序号放进数组 (平均分组)
SELECT  NTILE(3) OVER ( ORDER BY StuSex ) ,
        *
FROM    dbo.Student;

  

时间: 2024-10-11 00:59:32

SQL Server 2012 - 开窗函数的相关文章

SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用

由于前一段时间胃痛,导致博客园博客都停更了一个月左右.近几天,胃病终于稍微有所好转,决定重新写博文. 前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份.月份销售额,而需要一条 SQL 语句实现统计出每个月份以及当前月以前月份销售额和.尼玛,感觉还是没有说清,下面用图表示.      SQL 测试表脚本        DECLARE @Temp Table ( ID INT, --- 月份 MoneyData Float --- 金额 ) insert INTO @TE

sql server利用开窗函数over() 进行分组统计

这是一道常见的面试题,在实际项目中经常会用到. 需求:求出以产品类别为分组,各个分组里价格最高的产品信息. 实现过程如下: declare @t table( ProductID int, ProductName varchar(20), ProductType varchar(20), Price int) --测试数据 insert @t select 1,'name1','P1',3 union all select 2,'name2','P1',5 union all select 3,

SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT

DECLARE @page INT, @size INT;select @page = 300, @size = 10 SELECT *FROM gpcomp1.GPCUSTWHERE company like 'a%'ORDER BY CUSTNOOFFSET (@page -1) * @size ROWSFETCH NEXT @size ROWS ONLY; SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT,布布扣,bubuko.com

【Transact-SQL】SQL Server 2012新功能之一:转换函数

在SQL Server 2012中,新增了几个转换函数,用于支持数据类型的强制转化. 由于之前主要用的是SQL Server 2008R2,而公司的项目为了提高开发效率,很多表的列都为varchar类型,但也会存储数字. 当对这些列进行聚合计算,比如sum时,要先进行cast转换为numeric类型,经常会报错,现在有了这些新的函数,可以先try一下,通过判断返回值是否为null,我们可以判断字段值是否为数字,如果不是数字,就直接过滤到,所以这些函数非常实用,希望对大家有用. 1.PARSE函数

SQL Server 2012 案例教程(贾祥素)——学习笔记

第2章 SQL Server 2012概述 1.SQL(Structed Query Language),结构化查询语言. 2.SSMS(SQL Server Mangement Studio),SQL Server 2012的操作环境. 3.连接SQL Server之前应先启动SQL Server服务,即SQL Server(MSSQLSERVER): 方法1 开始--所有程序--Microsoft SQL Server 2012--配置工具--SQL Server配置管理器. 方法2 控制面

sql server常见配置函数及其功能

配置函数用于返回配置选项的设置信息,常见如下: [email protected]@DATEFIRST 针对会话返回SET DATEFIRST的当前值,set  datefirst表示指定的每周的第一天, 美国英语中默认1对应星期一,2对应星期二,以此类推,7对应周日,周日在西方表示每周的第一天 示例:以下设置5,周五作为每周的第一天,并假定今天是周五,即今日是以周五为第一天 set datefirst 5 go select @@DATEFIRST 第一天,datepart(DW,getdat

SQL Server 2012笔记分享-38:了解系统数据库

master 数据库 记录 SQL Server 实例的所有系统级信息. master 数据库记录 SQL Server 系统的所有系统级信息.这包括实例范围的元数据(例如登录帐户).端点.链接服务器和系统配置设置.此外,master 数据库还记录了所有其他数据库的存在.数据库文件的位置以及 SQL Server 的初始化信息.因此,如果 master 数据库不可用,则 SQL Server 无法启动.在 SQL Server 中,系统对象不再存储在 master 数据库中,而是存储在 Reso

SQL Server数据库ROW_NUMBER()函数使用

下面以几个实例来说明ROW_NUMBER()函数的使用. 实例如下: 1.使用row_number()函数进行编号,如 select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer 原理:先按psd进行排序,排序完后,给每条数据进行编号. 2.在订单中按价格的升序进行排序,并给每条记录进行排序代码如下: select DID,customerID,totalPrice,ROW_NUMBER() 

SQL SERVER 2012 SEQUENCE

一.Sequence简介 Sequence对象对于Oracle用户来说是最熟悉不过的数据库对象了, 在SQL SERVER2012终于也可以看到这个对象了.Sequence是SQL Server2012推出的一个新特性.这个特性允许数据库级别的序列号在多表或多列之间共享. 二.Sequence基本概念 Oracle中有Sequence的功能,SQL server类似的功能要使用identity列实现,但是identity列有很大的局限性.微软终于在2012中添加了Sequence对象.与以往id