SQL Server 2005新聚合函数: Row_Number, Rank, Dense_Rank and nTile介绍

锋利的SQL-基于窗口的排名计算 在SQL Server中,窗口被定义为用户指定的一组行。之所以要提出窗口这个概念,因为这种基于窗口或分区的重新计算在实际工作应用范围比较广泛。例如,假设我们要对每个班级中的学生按成绩进行排序,在对第1个班级排序完成后,对第2个班级进行排序时编号需要重新从1开始。在SQL Server 2005之前,像这种排序方式实现起来是比较烦琐的。可以说,对新窗口重新启动计算是窗口计算的重要特点。 阅读详情

 1, Row_Number()

Returns the sequential number of a row within a partition of a result set, starting at 1 for the first row in each partition.    为查询出来的每一行记录生成一个序号。

 

Syntax:  ROW_NUMBER () OVER ( [ <partition_by_clause> ] <order_by_clause> )

                  partition 用来分组,如果有partition语句,行号将按组分配,如果没有,行号将按整个结果集分配。

                  order by 用来决定按什么顺序分配行号,这里的order by与select语句的order by没有关系。

 

使用: 数据分页, 取某一段数据, 去除重复行

 

eg. : 

USE AdventureWorks;
GO
WITH OrderedOrders AS
(SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (order by OrderDate)as RowNumber
FROM Sales.SalesOrderHeader )
SELECT *
FROM OrderedOrders
WHERE RowNumber between 50 and 60;

 

 

2, RANK()

 Returns the rank of each row within the partition of a result set. The rank of a row is one plus the number of ranks that come before the row in question.   排名函数,生成的序号不一定连续,例如,有2条记录排名都为1,则接下来的排名为3,而不会出现排名为2的记录。

 

Syntax:    RANK () OVER( [ < partition_by_clause > ] < order_by_clause > )

 

使用: 排名

 

eg. :

USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity, RANK() OVER (PARTITION BY i.LocationID order by i.Quantity) as RANK
FROM Production.ProductInventory i JOIN Production.Product p
ON i.ProductID = p.ProductID
ORDER BY p.Name
GO

 

3, DENSE_RANK()

 Returns the rank of rows within the partition of a result set, without any gaps in the ranking. The rank of a row is one plus the number of distinct ranks that come before the row in question.  dense_rank函数的功能与rank函数类似,只是在生成序号时是连续的

 

Syntax:   DENSE_RANK ( )    OVER ( [ < partition_by_clause > ] < order_by_clause > )

 

eg. : 

USE AdventureWorks;
GO
SELECT  i.ProductID, p.Name, i.LocationID, i.Quantity, DENSE_RANK() OVER (PARTITION BY i.LocationID order by i.Quantity) as DENSE_RANK
FROM Production.ProductInventory i JOIN Production.Product p ON i.ProductID = p.ProductID
ORDER BY Name;
GO

 

 

4, NTILE()

Distributes the rows in an ordered partition into a specified number of groups. The groups are numbered, starting at one. For each row, NTILE returns the number of the group to which the row belongs.  ntile函数可以对序号进行分组处理。这就相当于将查询出来的记录集放到指定长度的数组中,每一个数组元素存放一定数量的记录。

 

Syntax:   NTILE (integer_expression)    OVER ( [ <partition_by_clause> ] < order_by_clause > )

Remarks:
    If the number of rows in a partition is not divisible by expression, this will cause groups of two sizes that differ by one member. Larger groups come before smaller groups in the order specified by the OVER clause. For example if the total number of rows is 53 and the number of buckets is five, the first three buckets will have 11 rows and the two remaining buckets will have 10 rows each. If on the other hand the total number of rows is divisible by the number of buckets, the rows will be distributed evenly among the buckets. For example, if the total number of rows is 50, and there are five buckets, each bucket will contain 10 rows.

 

eg. : 

USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName, NTILE(4) OVER(ORDER BY SalesYTD DESC) AS 'Quartile', s.SalesYTD, a.PostalCode
From Sales.SalesPerson s JOIN Person.Contact c on s.SalesPersonID = c.ContactID
JOIN Person.Address a ON a.AddressID = c.ContactID
WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0;
GO

鸿蒙PC深度体验:从Windows切换的三个月实战总结与避坑指南 操作系统迁移是许多用户在PC换机时面临的核心挑战,其本质涉及生态兼容、文件系统、外设驱动与开发环境的重新适配。鸿蒙PC作为新一代跨设备操作系统,通过统一账号与超级终端实现了多设备协同,从办公文档处理到即时通讯均有原生方案,同时在打印外设和NTFS磁盘写入等环节仍需兼容策略。对于开发者而言,ArkTS语言与DevEco Studio构建了完整的应用开发链路,而Python与本地服务可借助虚拟机方案平滑落地。本文基于三个月的Windows迁移实战,梳理从系统初始化、文件管理到高频排障的完整路径,帮助普通用户与开 阅读详情

相关推荐

洛谷 P5736 【深基7.例2】质数筛

题目描述 输入 n(n\le100)n(n≤100) 个不大于 100000 的整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 无 输出格式 无 输入输出样例 输入 #1 复制 5 3 4 5 6 7 输出 #1 复制 3 5 7 板子题,使用一下线性筛 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using n

qq_37978559的博客 1117

【转】SQL中row_number() over(partition by)详解

row_number 语法 ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号。在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于预先排序以便于进行编号 partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,分区函

step by step 1888

云模型在综合评价过程中的应用

目录 1 云模型标尺(标准云模型)的构建方法 1.1 通过正态云的“3En 规则”来表示评价论域 1.2 通过论域的边界值隶属度相等来表示评价论域 1.3 通过黄金分割法来表示评价论域 2 确定评价结果的过程 2.1 基本云发生器 2.2 X条件云发生器 2.3 两种方法的区别 综合评价问题一般分为以下六个步骤 1、明确评价目的; 2、确定被评价对象; 3、建立评价指标体系(包括收集评价指标的原始值、评价指标的若干预处理等); 4、确立与各项评价指标相对应的权重系数; 5、选..

weixin_62223576的博客 1万+

SQL2012(聚合函数+排序函数)用法介绍

/*************************************** 2012 - Aggregate with order ****************************************/ ;with CTEOrders as (select cast(1 as int) as OrderID, cast('3/1/2012' as date) as Orde...

weixin_33894640的博客 248

OpenFoam实用技巧——starccm网格高效转换openfoam格式全解析

本文详细解析了如何利用OpenFOAM官方工具`ccm26toFoam`,将STAR-CCM+生成的高质量网格高效、稳定地转换为OpenFOAM格式。内容涵盖从STAR-CCM+正确导出网格、执行转换命令、解读转换日志,到转换后关键的边界条件修复与网格质量检查等全流程,旨在帮助用户规避常见错误,实现无缝工作流衔接。

weixin_28309571的博客 456

探索Python融合地学:一文解决osgeo库安装失败问题

总结一下,要安装osgeo模块,关键在GDAL依赖库的安装,如果能够顺利安装GDAL依赖库,因其是osego的模块,因此osgeo的部分模块也能够得到自动安装,此时再运行代码,发现代码并不报错,能够正常运行了。第一步,我们要安装imagecodecs库,它支持多种常见的图像格式,当然也包含我们的目标tif格式,为方便后续的图像处理和安装osgeo模块,先安装此库。目前GDAL已经更新到了3.10版本,这里主要看你的Python版本是上面,小编用的是Python3.13,电脑是64位的,因此,我们选择。

Promising_GEO的博客 5461

SQL SERVER 开窗函数简介

在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数。 以SQL SERVER中分面页为例,按时间顺序列出定单号。 WITH OrderInfo AS (  SELECT ROW_NUMBER() OVER(ORDER BY OrderDate) AS Number,  OrderID,CustomerID, EmployeeID,OrderDate FROM

liu_1983的专栏 1万+

linux 4.19在龙芯平台上编译出错解决方法

OS: Loongnix server 1.7 工具链为:系统自带的gcc-4.8.5 和 gcc-7.3 平台:3A3000/3A4000 源码:kernel: 4.19 编译步骤 ··· make loongson3_defconfig make -j4 ··· 出错信息: HOSTCC arch/mips/boot/compressed/calc_vmlinuz_load_addr arch/mips/boot/compressed/head.S: Assembler messages: arch/m

sense的专栏 1124

SQL窗口函数:ROW_NUMBER、RANK、DENSE_RANK与NTILE的深度解析与应用

在数据库查询与数据分析中,排序和分组排名是常见且核心的需求。窗口函数作为SQL的高级特性,其原理是在不改变原始行数的基础上,为每一行计算基于特定窗口的聚合或排序值。这一技术价值在于能够高效处理复杂的分组内排序、排名和分桶问题,避免了繁琐的多层子查询,显著提升查询性能和代码可读性。其应用场景广泛,包括数据去重、分页优化、业绩排名、客户分层以及数据采样等。本文聚焦于窗口函数中的排名函数子集,特别是ROW_NUMBER、RANK、DENSE_RANK和NTILE,通过对比它们处理并列和序号连续性的差异,并结合数据

weixin_30603633的博客 500

Jetson Orin NX深度学习环境配置全攻略:从JetPack到PyTorch避坑指南

本文提供Jetson Orin NX深度学习环境配置的完整避坑指南。重点讲解如何正确利用JetPack SDK作为系统基石,使用Miniforge管理Python环境,并安装与CUDA版本严格匹配的PyTorch特供版本。通过详细的步骤和验证方法,帮助开发者在ARM架构的嵌入式平台上高效搭建稳定的AI开发工作站。

yolo5detector的博客 272

AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研

在当今的人工智能时代,大模型技术的迅猛发展为各行各业带来了前所未有的变革。这些大模型,以其强大的语言理解和生成能力,正在逐步成为智能化应用的核心。然而,如何高效地利用这些大模型,构建出满足各种需求的应用,仍然是一个具有挑战性的问题。DB-GPT,作为一个开源的AI原生数据应用开发框架,应运而生,旨在简化大模型应用的开发过程,让构建智能化应用变得触手可及。本文将深入介绍DB-GPT的核心功能、关键特性,并通过实战操作,展示如何利用DB-GPT进行数据应用开发。DB-GPT是一个开源的AI原生数据应用开发框架。

寻道AI,探索AI无限可能! 1万+

SQL Server 之 与 OVER() 函数

在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数。 一、 OVER() 函数   语法结构:OVER( [ PARTITION BY ... ] [ ORDER BY ... ] )   [1] PARTITION BY 子句进行分组;   [2] PARTITION BY 子句进行排序。   窗口函数OVER()指定一组行,开窗函数计算从窗口函数输出的结果集...

qq_27997957的博客 4328

【QNX+Android虚拟化方案】01 - 芯片介绍

【QNX+Android虚拟化方案】01 - 芯片介绍

|~~~热爱生活、努力学习的小伙汁~~~| 2945

oracle sql时间排序函数,sql的rank函数

SQL SERVER 2008排序函数(窗口函数)排序函数可以用来协助给结果集增加位置信息。SQL SERVER 2008只有四个排序函数,介绍如下:ROW_NUMBER:返回结果集中给定行的序号RANK:基于给定行集合的选择顺序,给出行的位置。如有一些值连在一起,位置间有空隙 如两个值在第一位,然后下一个值将在第三位DENSE_RAN...文章孤独的猫董2012-11-11698浏览量S...

weixin_36165152的博客 1185

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java中rank函数_sql rank()函数

RANK() OVER([])partition_by_clause 将from子句生成的结果集划分为应用到RANK函数的分区。Order_by_clause确定将RANK值应用到分区中的行时所使用的顺序。以下用一个成绩表作示例table 架构s_score(s_class(班级),s_id(学号),s_score(分数))SQL statement1:Select rank() over(ord...

weixin_42124497的博客 1025

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

排名函数是Sql Server2005新增的功能,下面简单介绍一下他们各自的用法和区别。我们新建一张Order表并添加一些初始数据方便我们查看效果。  表结构和初始数据Sql    附上表结构和初始数据图:   一、ROW_NUMBER  row_number的用途的非常广泛,排序最好用他,一般可以用来实现web程序的分页,他会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row...

sjmz30071360的专栏 2731

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SQL Server 2008的窗口计算

作者:张洪举,MVP应用于:SQL Server 2005,SQL Server 2008日期:2009/3/5在SQL Server中,窗口被定义为用户指定的一组行。例如,在下面表1所示的Students表中,包含有3个班级的学生成绩,则其中的每一个班级都可以被看作是一个数据窗口,或是分区。 ClassIDStudentNameAc

张洪举 4578

[SQLServer2005] 分析函数 (又称窗口函数)

1.简介: SQL Server 2005中的窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地累计总数、移动平均值、以及执行其它计算。窗口函数功能非常强大,使用起来也十分容易。可以使用这个技巧立即得到大量统计值。窗口是用户指定的一组行。 开窗函数计算从窗口派生的结果集中各行的值。2.适用范围:排名开窗函数和聚合开窗函数.也就是说窗口函数是结合排名开窗函数或者聚合开窗函数一起使用OVE

小旭的技术博客 7639

[SQL SERVER系列]之常用函数和开窗函数介绍及实例

本文主要介绍SQL SERVER数据库中一些常用的系统函数及其SQL SERVER 2005以上支持的开窗函数。 1.常用函数 --从字符串右边截取指定字符数 select RIGHT('HELLO', 2)   --LO   --受影响的行数 select @@ROWCOUNT   --求绝对值ABS() SELECT ABS(-2.0)   --2.0   --计算指数的

785

SQL2005的排名函数以及透析关键字

前段时间看了一号店的一道校招面试题,如下:

2148

SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数

https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649/archive/2011/08/13/2137370.html http://blog.csdn.net/liu_1983/article/details/7269312 在SQL SER...

weixin_33800463的博客 339

【转】SQL SERVER 开窗函数简介

在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数。 以SQL SERVER中分面页为例,按时间顺序列出定单号。 WITH OrderInfo AS ( SELECT ROW_NUMBER() OVER(ORDER BY OrderDate) AS Number, OrderID,CustomerID, EmployeeID,OrderDate FROM O...

weixin_30809173的博客 74

转:SQL SERVER 开窗函数简介

原帖:http://blog.csdn.net/liu_1983/article/details/7269312在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数。以SQL SERVER中分面页为例,按时间顺序列出定单号。WITH OrderInfo AS(SELECT ROW_NUMBER() OVER(ORDER BY OrderDate) AS Nu...

weixin_30911809的博客 67
上一篇: MSSQL2005行列转换(使用PIVOT and UNPIVOT)
下一篇: 介绍SQL Server 2005的CROSS Apply
赵大米
博客等级 码龄24年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值