取得するために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
カウントを取得します。
そして2番目の質問では、行の主キーは特定の行を識別するために使用されるべきものです。そのために行番号を使用しないでください。
メインクエリで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()
の使用方法です。
合計行数を取得するには、次の手順を実行します。
with temp as (
select row_number() over (order by id) as rownum
from table_name
)
select max(rownum) from temp
Nameが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()
の非常に単純な実装でした。より複雑なグループ化に使用できます。サブクエリを使用せずに 高度なグループ化に関する私の回答をチェックしてください
テーブルの合計行数を返す必要がある場合は、SELECT COUNT(*)
ステートメントの代わりの方法を使用できます。
SELECT COUNT(*)
はテーブル全体をスキャンして行数を返すので、大きなテーブルでは非常に長い時間がかかります。この場合は代わりにsysindexes
システムテーブルを使用できます。データベースの各テーブルの合計行数を含むROWS
列があります。次のSELECT文を使用できます。
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()
の違いはこちら でご覧になれます。
SELECT num, UserName FROM
(SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num
From Users) AS numbered
WHERE UserName='Joe'
これを使って最初のレコードを取得しますwhere where句
SELECT TOP(1) * , ROW_NUMBER() OVER(ORDER BY UserId) AS rownum
FROM Users
WHERE UserName = 'Joe'
ORDER BY rownum ASC
ここでの質問とは関係ないかもしれません。 ROW_NUMBER
を使うときに便利だと思いました -
SELECT *,
ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS Any_ID
FROM #Any_Table
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
指定されたQueryで言及されているWITH table 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
を使用できます。
クエリ結果を制限するためにRow_Number
を使用できます。
例:
SELECT * FROM (
select row_number() OVER (order by createtime desc) AS ROWINDEX,*
from TABLENAME ) TB
WHERE TB.ROWINDEX between 0 and 10
- 上記のクエリで、TABLENAME
から結果のPAGE 1を取得します。
Count(*)の代わりにROW_NUMBERを絶対に使用したい場合は、いつでも使用できます。
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
このクエリ:
SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'
UserName
が'Joe'
であるすべての行を返しますUserName='Joe'
がない場合
それらはUserID
の順にリストされ、row_number
フィールドは1から始まりインクリメントされますが、多くの行にUserName='Joe'
が含まれます。
うまくいかない場合は、WHERE
コマンドに問題がありますORテーブルにUserID
がありません。両方のフィールドUserID
とUserName
のスペルをチェックしてください。