Answers:
对于第一个问题,为什么不只是使用?
SELECT COUNT(*) FROM myTable
得到计数。
对于第二个问题,该行的主键是用于标识特定行的键。不要尝试为此使用行号。
如果您在主查询中返回了Row_Number(),
SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3
FROM User
然后,当您想返回5行时,可以获取当前行号,并使用以下查询确定当前行为-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()
:
要获取总行数:
with temp as (
select row_number() over (order by id) as rownum
from table_name
)
select max(rownum) from temp
要获取名称为Matt的行号:
with temp as (
select name, row_number() over (order by id) as rownum
from table_name
)
select rownum from temp where name like 'Matt'
您可以进一步使用min(rownum)
或max(rownum)
获取Matt的第一行或最后一行。
这些是的非常简单的实现row_number()
。您可以将其用于更复杂的分组。在不使用子查询的情况下,查看我对高级分组的回复
order by X
?换句话说,应该如何X
确定?谢谢!
order by X
是用于确定行分配顺序的顺序ROW_NUMBERS()
。请记住,关系数据库中的表尽管有名称,但没有正式的顺序,因此,如果要调用行“ 1”,“ 10”或“ 1337”,则需要先使用ORDER BY
子句对它们进行排序是该OVER (ORDER BY X)
子句中的内容。
如果您需要返回表的总行数,则可以使用另一种方法 SELECT COUNT(*)
语句。
因为SELECT COUNT(*)
进行全表扫描以返回行数,所以对于大表可能要花费很长时间。sysindexes
在这种情况下,可以改用系统表。有一ROWS
列包含数据库中每个表的总行数。您可以使用以下选择语句:
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2
这将大大减少查询所花费的时间。
ROW_NUMBER()
对于以1开头的每一行,返回一个唯一的数字。您只需编写以下代码即可轻松使用:
ROW_NUMBER() OVER (ORDER BY 'Column_Name' DESC) as ROW_NUMBER
你可以找到之间的差异Row_number()
,Rank()
并Dense_Rank()
在这里。
您可以使用它来获取具有has子句的第一条记录
SELECT TOP(1) * , ROW_NUMBER() OVER(ORDER BY UserId) AS rownum
FROM Users
WHERE UserName = 'Joe'
ORDER BY rownum ASC
SELECT num, UserName FROM
(SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num
From Users) AS numbered
WHERE UserName='Joe'
TABLE
VIEW
关键字或关键字的情况 ……但可以SELECT
肯定!!)
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
您可以使用Row_Number
限制查询结果。
例:
SELECT * FROM (
select row_number() OVER (order by createtime desc) AS ROWINDEX,*
from TABLENAME ) TB
WHERE TB.ROWINDEX between 0 and 10
-通过上述查询,我将从中获得第1页结果TABLENAME
。
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