我想使用ROW_NUMBER()来获得…

得到max(ROW_NUMBER())——>或者我猜这也将是所有行的计数

我试着这样做:

SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users

但这似乎并不奏效……

要获得ROW_NUMBER()使用一个给定的信息,即。如果我有一个名字,我想知道它来自哪一行。

我认为这将类似于我在第1条中所尝试的内容

SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'

但这也不管用……

什么好主意吗?


当前回答

select 
  Ml.Hid,
  ml.blockid,
  row_number() over (partition by ml.blockid order by Ml.Hid desc) as rownumber,
  H.HNAME 
from MIT_LeadBechmarkHamletwise ML
join [MT.HAMLE] h on ML.Hid=h.HID

其他回答

虽然我同意其他人的观点,你可以使用count()来获得总的行数,下面是你如何使用row_count():

获取行总数no: temp为( 选择row_number() over(按id排序)为rownum 从table_name ) 从temp中选择max(rownum) 获取名称为Matt的行号: temp为( 选择name、row_number() over(按id排序)为rownum 从table_name ) select rownum from temp where name like Matt

您可以进一步使用min(rownum)或max(rownum)分别获取Matt的第一行或最后一行。

这些都是row_number()的非常简单的实现。您可以将它用于更复杂的分组。检查我的高级分组不使用子查询的响应

可能和这里的问题无关。但我发现它在使用ROW_NUMBER -时很有用

SELECT *,
ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS Any_ID 
FROM #Any_Table
SELECT num, UserName FROM 
 (SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num
  From Users) AS numbered
WHERE UserName='Joe'

如果你真的想使用ROW_NUMBER(而不是count(*)),你可以使用:

SELECT TOP 1 ROW_NUMBER() OVER (ORDER BY Id)   
FROM USERS  
ORDER BY ROW_NUMBER() OVER (ORDER BY Id) DESC

SQL Row_Number()函数的作用是对相关记录集中的数据行进行排序并分配顺序号。因此,它被用于为行编号,例如,确定订单金额最高的前10行,或确定每个客户的订单金额最高,等等。

如果你想对数据集进行排序,并将每行划分为类别,我们使用Row_Number()和Partition by子句。例如,在数据集包含所有订单的情况下,对每个客户的订单进行排序等等。

SELECT
    SalesOrderNumber,
    CustomerId,
    SubTotal,
    ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY SubTotal DESC) rn
FROM Sales.SalesOrderHeader

但据我所知,你想计算按列分组的行数。为了可视化需求,如果您希望在订单信息之外将相关客户的所有订单计数作为单独的列查看,可以使用count()聚合函数和Partition By子句

例如,

SELECT
    SalesOrderNumber,
    CustomerId,
    COUNT(*) OVER (PARTITION BY CustomerId) CustomerOrderCount
FROM Sales.SalesOrderHeader