我想使用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 COUNT(*) FROM myTable
为了得到计数。
对于第二个问题,行的主键是用来标识特定行的。不要尝试使用行号。
如果在主查询中返回Row_Number(),
SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3
FROM User
然后,当您想返回5行时,您可以获取当前行号并使用以下查询来确定currentrow为-5的行
SELECT us.Id
FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS Row, Id
FROM User ) us
WHERE Row = CurrentRow - 5
虽然我同意其他人的观点,你可以使用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()的非常简单的实现。您可以将它用于更复杂的分组。检查我的高级分组不使用子查询的响应
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
需要使用WITH表AS创建虚拟表,这在给定的查询中提到。
通过使用这个虚拟表,您可以执行CRUD操作w.r.t row_number。
查询:
WITH table AS
-
(SELECT row_number() OVER(ORDER BY UserId) rn, * FROM Users)
-
SELECT * FROM table WHERE UserName='Joe'
-
你可以在最后一句中使用INSERT, UPDATE或DELETE,而不用SELECT。