位置: 编程技术 - 正文

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)

  • 无法支付的应付账款需要交增值税吗
  • 行政单位总账科目
  • 旅游企业增值税优惠政策
  • 机动车发票申请流程
  • 施工机械保险费属于什么费用
  • 车辆使用费怎么开票
  • 暂估进项税额
  • 生产车间的房屋租赁费计入什么科目
  • 经营租赁不动产发票备注栏
  • 企业利润怎么拿出来
  • 未报税会怎么样
  • 增值税专用发票可以开电子发票吗
  • 金税四期上线对高净值人士的影响
  • 组织机构代码证过期
  • 国家税务总局2011年第25号公告
  • 个人无偿受赠房屋 个人所得税 张英泉
  • 视同销售产品与收款尾差怎么处理
  • 服务业增值税如何计算
  • 津贴证明是让单位开吗
  • 打官司收案是什么意思
  • 企业账面库存过大应怎样处理好
  • 出纳收到汇票如何登记
  • 免税销售额需要价税分离吗
  • 动漫软件公司的发展前景
  • 结转电费成本会计分录
  • 国内企业给国外企业开发票
  • bios设置网卡开启
  • 新版edge浏览器如何恢复设置
  • 员工宿舍水电费计入什么会计科目
  • 建筑业销项税和进项税计算
  • 软件开发行业的现状
  • 超级本能加装硬盘吗
  • 收到短期借款会计分录怎么做
  • php数组函数大全
  • 工程决算审计费收费标准
  • 支付厂房租金计入什么科目
  • 接受赠品的账务处理流程
  • php 中奖概率算法
  • 福利费入账要求
  • 物业水电费可以差额征税吗
  • 图文处理是做什么工作
  • 企业领用低值易耗品计入
  • 非公司员工可以举报公司不交社保吗
  • 进项发票数据导出
  • 不动产物权归属和内容的根据是什么?
  • 法人可以开个人票会怎么样
  • 发票报销是个人还是单位
  • 织梦怎么用模板建站
  • mysql 子表
  • 资产处置费用是指单位经批准处置资产时发生的费用
  • 清税证明怎么在网上申请
  • 不抵扣勾选的发票在哪里查看
  • sql server简单查询
  • 公司购买汽车的会计分录
  • 企业缴纳的住房公积金的税率
  • 支付与其他经营活动的现金为负数
  • 短期借款计提利息计入什么科目
  • sql入门课程
  • sql server复制数据库的方法
  • 哪个是win8.1更新win10的补丁
  • 地热不热怎么办一招教你解决
  • 深入理解linux内核架构
  • 微软the initiative
  • win8怎么固定桌面
  • linux对比文件夹差异
  • windows7的开机启动项在哪里
  • linux挂载啥意思
  • android开启adb
  • qt::windowtype
  • android新手入门
  • 下列关于eval()函数的说法正确的是
  • input按钮的事件处理大全
  • android基于linux还是unix
  • js对象用法
  • javascript面向对象吗
  • js 工作流
  • 涉税服务业务是什么
  • 特许权使用费包括哪些内容
  • 体育局和什么局合并了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设