首页 > 数据库 >SQL Server添加序号列

SQL Server添加序号列

时间:2022-12-11 23:22:22浏览次数:52  
标签:函数 OVER NUMBER RANK Server SQL 序号 ORDER ROW

https://www.cnblogs.com/cailinaaa/archive/2006/10/20/534988.html

SQL Server添加序号列  

select
ROW_NUMBER() OVER(ORDER BY Convey_Fee desc) as z,
rank() OVER(ORDER BY Convey_Fee desc) as z,
DENSE_RANK() OVER(ORDER BY Convey_Fee desc) as z,
NTILE(4) OVER(ORDER BY Convey_Fee desc) as z,

(select sum(1) from Consign_D where Convey_Fee<=a.Convey_Fee) num,
(select sum(1) from Consign_D where Convey_Fee<a.Convey_Fee) num1
,Convey_Fee
from Consign_D a
order by Convey_Fee desc

 

前4个ROW_NUMBER,RANK,DENSE_RANK和NTILE是SQL 2005新增加的!
后面2个是SQL 2000的

  SQL Server 2005中引入了四个新的评价函数:ROW_NUMBER,RANK,DENSE_RANK和NTILE。尽管这些与SQL Server 2000所提供的函数相比是一个明显的进步,但是这些函数的使用仍然存在一些限制(要求使用派生表或视图来实现功能更为强大的应用程序)。下面让我们分析一下每一个函数。

这个ROW_NUMBER函数把一个序数值赋给每一个返回的记录,该序数值依赖于一个特定的与这个函数一起使用的ORDER BY语句。函数ROW_NUMBER的语法是:ROW_NUMBER() OVER([partition] ORDER BY子句)。例如,下列查询将返回从最贵的到最便宜的产品,对每一种产品按价格进行评价:

SELECT ProductID,Name,Price, ROW_NUMBER() OVER(ORDER BY Price DESC) As PriceRankFROM Products


 默认情况下,这个ROW_NUMBER函数把一个增量值(逐次加1)赋给结果集中的每一个记录。借助于可选的partition参数,无论何时分区(partitioning)列值发生变化,你都可以让ROW_NUMBER函数重新计算行数。为了说明这个问题,我使用如下查询语法创建了一个视图vwTotalAmountBilledPerOrder,它将返回每一个OrderID和该订购的总订单数:

SELECT OrderID,SUM(AmountBilled) AS TotalOrderAmountFROM OrderItemsGROUP BY OrderID


  这条语句将返回OrderItems表中每一个唯一的订单,还有相应于该订单的AmountBilled值的和。借助于这个视图,我们可以使用ROW_NUMBER方法来按最大花钱数来评价这些订单,如下所示:

SELECT c.Name,o.DateOrdered,tab.TotalOrderAmount, ROW_NUMBER() OVER (ORDER BY TotalOrderAmount DESC) AS BestCustomerFROM vwTotalAmountBilledPerOrder AS tab INNER JOIN Orders AS o ON o.OrderID = tab.OrderID INNER JOIN Customers AS c ON c.CustomerID = o.CustomerID


注意,某些顾客多次出现在这个列表中(如Bob,Tito和Bruce)。也许有时,我们不是想观看以销售量排序的所有订单,而更想看到每一个顾客的最高订单量。为此,我们可以通过使用ROW_NUMBER函数中的PARTITION BY子句达到这一目的,如下所示:

SELECT c.Name, o.DateOrdered, tab.TotalOrderAmount, ROW_NUMBER() OVER (PARTITION BY c.CustomerID ORDER BY TotalOrderAmount DESC) AS BestCustomerFROM vwTotalAmountBilledPerOrder AS tab INNER JOIN Orders AS o ON o.OrderID = tab.OrderID INNER JOIN Customers AS c ON c.CustomerID = o.CustomerID


四、 使用RANK和DENSE_RANK处理同级问题

  基于可选的partition子句和要求的order by子句,ROW_NUMBER函数默认地递增(加1)每一个返回结果的值。然而,有时你可能想以不同方式处理相同级别,而不是把相同的值赋给相同的级别。例如,前面显示的总订单列表中,
RANK和DENSE_RANK函数都能够使用相同的评价计数级。例如,使用下列查询:

SELECT c.Name,o.DateOrdered,tab.TotalOrderAmount, RANK() OVER (ORDER BY TotalOrderAmount DESC) AS BestCustomerFROM vwTotalAmountBilledPerOrder AS tab INNER JOIN Orders AS o ON o.OrderID = tab.OrderID INNER JOIN Customers AS c ON c.CustomerID = o.CustomerID


注意,具有相同数量的两个订单是怎样都被评价为#4的。RANK和DENSE_RANK之间的不同之处在于,在平级的结果后他们是如何重新开始计数的。RANK绕过尽可能多的平级的结果。在我们上面的示例中,因为有两个结果绑定在#4上,因此跟随其后的#5被跳过而评价等级以#6继续。另一方面,DENSE_RANK从下一个整数继续。如果我们在上面的查询中使用函数名DENSE_RANK代替RANK,那么Tito在2005年12月18日相应于单价$12.44的订单评价将是#5。

  类似于ROW_NUMBER函数,RANK和DENSE_RANK函数都能使用可选的PARTITION BY语句。


  SQL Server 2005新引入的最后一个与T-SQL函数相关的评价函数是NTILE(int)。NTILE象其它的评价函数一样操作,但是它能够把结果分成组,每组中相应相同评价结果的记录。你可以使用NTILE函数把结果分解成两组、三组或四组等,

 

标签:函数,OVER,NUMBER,RANK,Server,SQL,序号,ORDER,ROW
From: https://www.cnblogs.com/Dongmy/p/16974860.html

相关文章

  • windows下QT5.9连接MYSQL
    首先,按照教程尝试连接数据库:QSqlDatabase:availabledrivers:QSQLITEQMYSQLQMYSQL3QODBCQODBC3QPSQLQPSQL7连接失败意思大概就是:“QMYSQL驱动加载失败”......
  • 《MySQL必知必会》之快速入门游标和触发器
    第二十四章使用游标本章将介绍什么是游标以及如何使用游标游标之前的select语句检索出来的数据,没有办法得到第一行或者下一行有时,需要在检索出来的行中前进或后退一行......
  • [BUUCTF][WEB][极客大挑战 2019]BabySQL 1
    靶机打开url界面上显示,它做了更严格的过滤。看来后台是加了什么过滤逻辑老规矩先尝试时候有sql注入的可能,密码框输入123'爆出sql错误信息,说明有注入点构造万能密码注......
  • MAYSQL 2 DAY
    MySQL1、关于查询结果集的去重?mysql>selectdistinctjobfromemp;//distinct关键字去除重复记录。+-----------+|job|+-----------+|CLERK||SA......
  • 静态文件相关配置、request请求方法、pycharm连接MySQL、orm
    静态文件相关配置、request请求方法、pycharm连接MySQL、orm风得意马蹄疾,一日看尽长安花一、静态文件相关配置1.编写一个登录功能1.创建一个django项目并创建一个app......
  • SQL_2_查询语句
     selcet语句:指定要查看的列(字段)信息,设计结果集样式,可以使用*表示显示所有列信息。selectdistinct'id='||id,name,ageas'年龄'1、列可以进行运算。2、......
  • Ubuntu20.04安装python3-pip后安装sqlalchemy报错AttributeError: module 'platform'
    解决方法如下:1.首先卸载已经安装python3-pipsudoaptremovepython3-pip2.安装python3.8-pipsudopython3.8-measy_installpip3.安装sqlalchemywang@wang:~$sudopip3.......
  • mysql安装
    1.要看linux中有没有安装,如果有就删除rpm-qa|grepmysqlrpm-qa|grepmariadb  (自带的会和mysql冲突)rpm-e--nodeps 软件名称    (卸载软件)2.安装r......
  • 0:数据库的产生-MySQL
    (目录)0.1什么是数据库database数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据0.2抛出问题,数据库的产生数据的存储(瞬时-->稳定)在......
  • SQL 问题与解答 - 数据库移动、性能优化、备份和镜像
    PaulS.Randal新阵列移动日问:我们当前的RAID很快就填满了,因此需要将一些SQLServer2005数据库移到其他位置。新阵列已准备就绪,并且我一直在为移动数据库作准备。我刚......