位置: 编程技术 - 正文

SQL Server 排序函数 ROW_NUMBER和RANK 用法总结(sql的排序函数)

编辑:rootadmin

1.ROW_NUMBER()基本用法:

SELECT SalesOrderID, CustomerID, ROW_NUMBER() OVER (ORDER BY SalesOrderID) AS RowNumber FROM Sales.SalesOrderHeader结果集:SalesOrderID CustomerID RowNumber--------------- ------------- --------------- 9 :2.RANK()基本用法:

SELECT SalesOrderID, CustomerID, RANK() OVER (ORDER BY CustomerID) AS Rank FROM Sales.SalesOrderHeader结果集:SalesOrderID CustomerID Rank--------------- ------------- ---------------- 1 1 1 1 2 2 2 2 2 2 2 2 3 :3.利用CTE来过滤ROW_NUMBER()的用法:

WITH NumberedRows AS( SELECT SalesOrderID, CustomerID, ROW_NUMBER() OVER (ORDER BY SalesOrderID) AS RowNumber FROM Sales.SalesOrderHeader)

SELECT * FROM NumberedRows WHERE RowNumber BETWEEN AND 结果集:

SalesOrderID CustomerID RowNumber--------------- ------------- -------------- : .带Group by的ROW_NUMBER()用法:

WITH CustomerSumAS( SELECT CustomerID, SUM(TotalDue) AS TotalAmt FROM Sales.SalesOrderHeader GROUP BY CustomerID)SELECT *, ROW_NUMBER() OVER (ORDER BY TotalAmt DESC) AS RowNumber FROM CustomerSum结果集:CustomerID TotalAmt RowNumber------------- --------------- --------------- . . . . . . . 7 :5.ROW_NUMBER()或是RANK()聚合用法:

WITH CustomerSum AS( SELECT CustomerID, SUM(TotalDue) AS TotalAmt FROM Sales.SalesOrderHeader GROUP BY CustomerID)SELECT *, RANK() OVER (ORDER BY TotalAmt DESC) AS Rank--或者是ROW_NUMBER() OVER (ORDER BY TotalAmt DESC) AS Row_Number FROM CustomerSumRANK()的结果集:CustomerID TotalAmt Rank----------- --------------------- -------------------- . . . . . 5 :6.DENSE_RANK()基本用法:

SELECT SalesOrderID, CustomerID, DENSE_RANK() OVER (ORDER BY CustomerID) AS DenseRank FROM Sales.SalesOrderHeader WHERE CustomerID > 结果集:SalesOrderID CustomerID DenseRank------------ ----------- -------------------- 3 :

7.RANK()与DENSE_RANK()的比较:

WITH CustomerSum AS( SELECT CustomerID, ROUND(CONVERT(int, SUM(TotalDue)) / , 8) * AS TotalAmt FROM Sales.SalesOrderHeader GROUP BY CustomerID)SELECT *, RANK() OVER (ORDER BY TotalAmt DESC) AS Rank, DENSE_RANK() OVER (ORDER BY TotalAmt DESC) AS DenseRank FROM CustomerSum结果集:CustomerID TotalAmt Rank DenseRank----------- ----------- ------- -------------------- 1 2 3 4 4 : :

8.NTILE()基本用法:

SELECT SalesOrderID, CustomerID, NTILE() OVER (ORDER BY CustomerID) AS NTile FROM Sales.SalesOrderHeader结果集:SalesOrderID CustomerID NTile--------------- ------------- --------------- 1 1 1 1 2 2 2 2 2 2 2 2 3 4 :

9.所有排序方法对比:

SELECT SalesOrderID AS OrderID, CustomerID, ROW_NUMBER() OVER (ORDER BY CustomerID) AS RowNumber, RANK() OVER (ORDER BY CustomerID) AS Rank, DENSE_RANK() OVER (ORDER BY CustomerID) AS DenseRank, NTILE() OVER (ORDER BY CustomerID) AS NTile FROM Sales.SalesOrderHeader结果集:OrderID CustomerID RowNumber Rank DenseRank NTile-------- ------------- --------- ------- --------- -------- 1 1 1 1 1 2 1 1 1 3 1 1 1 4 1 1 2 5 5 2 2 6 5 2 2 7 5 2 2 8 5 2 2 9 5 2 2 5 2 2 5 2 2 5 2 3 3 3 3 4 :

.PARTITION BY基本使用方法:

SELECT SalesOrderID, SalesPersonID, OrderDate, ROW_NUMBER() OVER (PARTITION BY SalesPersonID ORDER BY OrderDate) AS OrderRank FROM Sales.SalesOrderHeader WHERE SalesPersonID IS NOT NULL结果集:SalesOrderID SalesPersonID OrderDate OrderRank--------------- ---------------- ------------ -------------- : -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. : -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. -- ::. :

.PARTITION BY聚合使用方法:WITH CTETerritory AS( SELECT cr.Name AS CountryName, CustomerID, SUM(TotalDue) AS TotalAmt FROM Sales.SalesOrderHeader AS soh INNER JOIN Sales.SalesTerritory AS ter ON soh.TerritoryID = ter.TerritoryID INNER JOIN Person.CountryRegion AS cr ON cr.CountryRegionCode = ter.CountryRegionCode GROUP BY cr.Name, CustomerID)SELECT *, RANK() OVER(PARTITION BY CountryName ORDER BY TotalAmt, CustomerID DESC) AS Rank FROM CTETerritory

结果集:

CountryName CustomerID TotalAmt Rank-------------- ------------- ----------- --------------Australia 4. 1Australia 4. 2Australia 5. 3Australia 5. 4Australia 5. 5 :Canada 5. 1Canada 5. 2Canada 5. 3Canada 5. 4Canada 5. 5 :France 4. 1France 4. 2France 4. 3France 4. 4France 4. 5 :

.PARTITION BY求平均数使用方法:

WITH CTETerritory AS( SELECT cr.Name AS CountryName, CustomerID, SUM(TotalDue) AS TotalAmt FROM Sales.SalesOrderHeader AS soh INNER JOIN Sales.SalesTerritory AS ter ON soh.TerritoryID = ter.TerritoryID INNER JOIN Person.CountryRegion AS cr ON cr.CountryRegionCode = ter.CountryRegionCode GROUP BY cr.Name, CustomerID)SELECT *, RANK() OVER (PARTITION BY CountryName ORDER BY TotalAmt, CustomerID DESC) AS Rank, AVG(TotalAmt) OVER(PARTITION BY CountryName) AS Average FROM CTETerritory

结果集:

CountryName CustomerID TotalAmt Rank Average-------------- ------------- ----------- ------- ------------------Australia 4. 1 .Australia 4. 2 .Australia 5. 3 . :Canada 5. 1 .Canada 5. 2 .Canada 5. 3 .

推荐整理分享SQL Server 排序函数 ROW_NUMBER和RANK 用法总结(sql的排序函数),希望有所帮助,仅作参考,欢迎阅读内容。

SQL Server 排序函数 ROW_NUMBER和RANK 用法总结(sql的排序函数)

文章相关热门搜索词:sql排序语句,sqlserver排序函数,sqlserver排序语句,sql 排序 序号,sqlserver排序规则选择什么,sqlserver排序语句,sql排序语句,sqlserver排序语句,内容如对您有帮助,希望把文章链接给更多的朋友!

数据库Left join , Right Join, Inner Join 的相关内容,非常实用 一.先看一些最简单的例子例子TableAaidadate1aaa3TableBbidbdate1bbb4两个表a,b相连接,要取出id相同的字段select*fromainnerjoinbona.aid=b.bid这是仅取出匹配的数据.

MySql 安装时的错误 解决办法1.卸载重装,不设root密码,因为MySql默认密码为空。解决办法2.保持现在的密码,打开MySQLCommandLineClient输入你的密码(安装时设的那个,如果密

SQL Server 中查看SQL句子执行所用的时间 setstatisticsprofileonsetstatisticsioonsetstatisticstimeongo你执行的SQL语句gosetstatisticsprofileoffsetstatisticsiooffsetstatisticstimeoff执行完后点消息即可。

标签: sql的排序函数

本文链接地址:https://www.jiuchutong.com/biancheng/349113.html 转载请保留说明!

上一篇:sql server 常用的几个数据类型(sql server用处)

下一篇:数据库Left join , Right Join, Inner Join 的相关内容,非常实用(数据库left joins)

  • 计提的坏账准备可以税前扣除吗
  • 销项负数发票能用吗
  • 培训机构的教材需要教育部门审批吗
  • 土地摊销计入在建工程吗
  • 其他应收怎么调增值税
  • 以汽车出资
  • 支付刻制公司印章费
  • 发生检测费用时怎么入账
  • 隔月红冲发票对报税有影响
  • 营改增后企业出售使用过的旧车
  • 在建工程的利息支出
  • 跨省非独立核算分公司如何报税
  • 仓库盘盈计入什么会计
  • 计提坏账准备和发生坏账准备分录
  • 可转换公司债券转股会计分录
  • 年薪制与月薪制的优与劣
  • 成本费用跨年度怎么计算
  • 电子发票转收入怎么做为记账凭证?
  • 公司的班车费用怎么入账
  • 非绑定账户转入啥意思
  • 计提工资当月要结转吗?
  • 这个月只有销项没有进项怎么申报
  • 生产成本期末余额在贷方
  • 公司支付给法院要交税吗
  • 合同负债和预收账款的关系
  • 营运资金主要包括什么
  • 现在还有票据法吗
  • win11系统开机密码怎么修改
  • 会计准则新规
  • 详解九章算法
  • 免抵退税帐务处理
  • java中怎么连接数据库
  • php怎么读取txt
  • linux suid
  • 企业所得税征前减免是什么意思
  • 增值税电子普通发票怎么打印
  • ChatGPT全面升级,GPT4支持多模态数据。
  • web攻防之业务安全实战指南在线阅读
  • typescriptlang
  • php获取ua
  • 餐厅的打包盒一般是多少毫升
  • 汇算清缴期间费用保险费是什么
  • c语言fseek函数
  • mysql备份方式有哪些
  • 购买工业用地
  • 终止经营列报的相关表述
  • 财政部监制的收据没有税号可以入账吗
  • sqlserver2005属于
  • 租入厂房再转租新租赁准则如何处理
  • 固定资产盘点怎么做
  • 固定资产大修理和更新改造的区别
  • 政府会计制度中累计盈余怎么计算
  • 什么叫转让财产收入
  • 公司买车赠送给个人,怎么交税
  • 个人打钱到公司账上违法吗
  • 契税在计算利润时不扣除吗
  • 小企业会计准则2023电子版
  • 律师事务所日语助理
  • 叉车上牌流程注册登记
  • 分公司给总公司分红怎么入账
  • MySQL 5.7.18 release版安装指南(含有bin文件版本)
  • centos6.5中文
  • 富士通FUJITSU笔记本电脑开机进入BIOS的方法(F2)
  • 电脑无法检测到麦克风怎么办
  • ubuntu创建新用户并增加管理员权限
  • ubuntu operation not permitted
  • encore是什么软件
  • LINUX系统下MySQL 压力测试工具super smack
  • linux bash sh
  • win7系统怎么连接wifi
  • linux中sed命令
  • pe,翻译
  • Android ViewStub 布局延迟加载
  • unity3D游戏开发
  • unityplayer安卓
  • unity3d总结
  • python迭代算法举例
  • 国家税务总局手工发票查询平台
  • 税控盘时钟异常怎么办
  • 陕西省机构改革方案获批
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设