位置: 编程技术 - 正文

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)

  • 交城市维护建设税填什么凭证
  • 牲畜资产科目包括哪些
  • 一税两费可以从费用中扣除吗
  • 包装纸箱属于原材料吗
  • 新会计准则 预付房租怎么做账
  • 一般纳税人快递费税率
  • 工资 小数点
  • 营改增前未完工的老项目可以开专票吗
  • 预交土地增值税怎么计算公式
  • 扶贫费用事业单位账务处理怎么做?
  • 商业银行退出
  • 银行代扣水费发票怎么开
  • 为什么要开增值税
  • 纳税人和征税对象的区别
  • 税号开错了
  • 专票上的账号和收款账号要一致吗
  • 存款保险能取出来钱吗
  • 固定资产转固流程图
  • 环评费用计入管理费用吗 是否需要摊销
  • 资本公积与股东借款
  • 垫付按揭保证金怎么做账
  • 上月销项税额错了怎么修改凭证?
  • 进项和销项单价的比例
  • 未提完折旧的固定资产重新评估后是否还计提折旧
  • 机械设备已使用怎么处理
  • 房屋拆迁过渡费由哪个部门发
  • 如何测试网络延迟
  • symtray.exe - symtray是什么进程 有何作用
  • 预缴企业所得税怎么做账务处理
  • 冲回上年多提的费用会计分录
  • 潜亏挂账是什么意思
  • 在资本相对充足的情况下,为什么还要进一步引进外资
  • 野生动物保护区有哪些
  • 各种汇票
  • 进项税年末结转分录
  • 销售自己使用过的固定资产
  • javascript 高级教程
  • 转让金融商品应交增值税计算公式
  • 公司管理费一般占多少个点
  • 社保费已扣为什么显示欠缴
  • 认缴出资和注册资本
  • dedecms仿站如何做
  • 发票章丢了会不会有事
  • 工资的计提基数
  • 经营活动现金流量比率
  • 福利部门领用材料计入什么科目
  • 丢失增值税发票已报税证明单取消
  • sql条件查询语句怎么写
  • 委托加工业务中需要计算缴纳增值税销项税
  • 职工薪酬纳税调整明细表税收金额
  • 事业单位零余额账户使用流程
  • 公司向个人借款利息可以税前扣除吗
  • 专打发票的打印机
  • 私营企业固定资产法律制度
  • sql获取某个字符的位置
  • SQL Server提示"选定的用户拥有对象,所以无法除去该用户”
  • 通过修改注册表激活win7
  • win8怎么关闭系统更新
  • tr linux 命令
  • WIN10怎么设置在平板模式下隐
  • 个性化定制方案怎么写
  • excel自动关闭如何设置
  • win10系统无法安装到gpt分区
  • edge以ie
  • ,linux
  • 遮罩层出现后怎么点击其他地方隐藏
  • python迭代器的作用
  • perl中的$_
  • cocos2dx-3.0(23) ScrollView 缩放 及 touch新用法
  • cocos2d-js游戏开发
  • unity3d教学视频
  • easyui datagrid loader
  • 支持向量机
  • mongoose python
  • checkbox选中一个其余选项置灰
  • 欠税款要坐牢吗
  • 不动产租赁和经营租赁发票的区别
  • 开发商卖商铺需要哪些资质条件?
  • 融资租赁做什么业务
  • 杭州 国税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设