Ik wil de ROW_NUMBER()
gebruiken om …
te krijgen
- Om de
max(ROW_NUMBER())
– & GT te krijgen; Of ik denk dat dit ook de telling van alle rijen zou zijn
Ik probeerde het:
SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users
Maar het leek niet te werken …
- om
ROW_NUMBER()
te krijgen met behulp van een bepaald stuk informatie, dat wil zeggen. Als ik een naam heb en ik wil weten in welke rij de naam vandaan kwam.
Ik neem aan dat het iets zou zijn dat lijkt op wat ik heb geprobeerd voor # 1
SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'
Maar dit werkte ook niet …
alle ideeën?
1, Autoriteit 100%
Voor de eerste vraag, waarom niet alleen gebruik?
SELECT COUNT(*) FROM myTable
om de telling te krijgen.
En voor de tweede vraag is de primaire sleutel van de rij wat moet worden gebruikt om een bepaalde rij te identificeren. Probeer niet en gebruik het rijnummer daarvoor.
Als u Row_Number () in uw hoofdquery hebt teruggestuurd,
SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3
FROM User
Dan wanneer u 5 rijen terug wilt gaan, kunt u het huidige rij-nummer nemen en de volgende zoekopdracht gebruiken om de rij met CURRENROW -5
te bepalen
SELECT us.Id
FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS Row, Id
FROM User ) us
WHERE Row = CurrentRow - 5
2, Autoriteit 31%
Hoewel ik het met anderen eens ben dat je count()
kunt gebruiken om het totale aantal rijen te krijgen, kun je als volgt de row_count()
gebruiken:
-
Om het totale aantal rijen te krijgen:
with temp as ( select row_number() over (order by id) as rownum from table_name ) select max(rownum) from temp
-
Om de rijnummers te krijgen waarbij de naam Matt is:
with temp as ( select name, row_number() over (order by id) as rownum from table_name ) select rownum from temp where name like 'Matt'
Je kunt verder min(rownum)
of max(rownum)
gebruiken om respectievelijk de eerste of laatste rij voor Matt te krijgen.
Dit waren zeer eenvoudige implementaties van ROW_NUMBER()
. U kunt het gebruiken voor complexere groepering. Bekijk mijn reactie op Geavanceerde groepering zonder een subquery te gebruiken
Antwoord 3, autoriteit 16%
Als u het totale aantal rijen van de tabel wilt retourneren, kunt u een alternatieve manier gebruiken voor de instructie SELECT COUNT(*)
.
Omdat SELECT COUNT(*)
een volledige tabel scan maakt om het aantal rijen te retourneren, kan het erg lang duren voor een grote tabel. In dit geval kunt u in plaats daarvan de systeemtabel sysindexes
gebruiken. Er is een kolom ROWS
die het totale aantal rijen bevat voor elke tabel in uw database. U kunt het volgende select-statement gebruiken:
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2
Dit zal de tijd die uw zoekopdracht in beslag neemt drastisch verminderen.
Antwoord 4, autoriteit 8%
U kunt dit gebruiken om het eerste record te krijgen waar de clausule heeft
SELECT TOP(1) * , ROW_NUMBER() OVER(ORDER BY UserId) AS rownum
FROM Users
WHERE UserName = 'Joe'
ORDER BY rownum ASC
Antwoord 5, autoriteit 6%
ROW_NUMBER()
retourneert een uniek nummer voor elke rij die begint met 1. U kunt dit eenvoudig gebruiken door simpelweg te schrijven:
ROW_NUMBER() OVER (ORDER BY 'Column_Name' DESC) as ROW_NUMBER
Antwoord 6, autoriteit 4%
Mogelijk niet gerelateerd aan de vraag hier. Maar ik vond dat het handig zou kunnen zijn bij het gebruik van ROW_NUMBER
–
SELECT *,
ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS Any_ID
FROM #Any_Table
Antwoord 7, autoriteit 2%
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
Antwoord 8, autoriteit 2%
SELECT num, UserName FROM
(SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num
From Users) AS numbered
WHERE UserName='Joe'
Antwoord 9
Als u absoluut ROW_NUMBER hiervoor wilt gebruiken (in plaats van count(*)), kunt u altijd het volgende gebruiken:
SELECT TOP 1 ROW_NUMBER() OVER (ORDER BY Id)
FROM USERS
ORDER BY ROW_NUMBER() OVER (ORDER BY Id) DESC
Antwoord 10
U kunt Row_Number
gebruiken voor limiet query-resultaat.
Voorbeeld:
SELECT * FROM (
select row_number() OVER (order by createtime desc) AS ROWINDEX,*
from TABLENAME ) TB
WHERE TB.ROWINDEX between 0 and 10
–
Met bovenstaande query krijg ik pagina 1 van de resultaten van TABLENAME
.
11
SQL Row_Number () Functie is om een bestelnummer aan data-rijen in gerelateerde recordset te sorteren en toewijzen. Het wordt dus gebruikt voor het aantal rijen, bijvoorbeeld om de top 10 rijen te identificeren die het hoogste bestelbedrag hebben of de volgorde van elke klant identificeren die het hoogste bedrag is, enz.
Als u de dataset en nummer elke rij wilt sorteren door ze in categorieën te scheiden, gebruiken we Row_Number () met partitie per clausule. Bijvoorbeeld, het sorteren van bestellingen van elke klant op zich waar de dataset alle bestellingen bevat, enz.
SELECT
SalesOrderNumber,
CustomerId,
SubTotal,
ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY SubTotal DESC) rn
FROM Sales.SalesOrderHeader
Maar zoals ik begrijp, wil je het aantal rijen van gegroepeerd door een kolom berekenen. Om de eis te visualiseren, als u de telling van alle bestellingen van de gerelateerde klant als een afzonderlijke kolom naast bestelinformatie wilt zien, kunt u Count () Aggregatie-functie met partitie per clausule
Bijvoorbeeld,
SELECT
SalesOrderNumber,
CustomerId,
COUNT(*) OVER (PARTITION BY CustomerId) CustomerOrderCount
FROM Sales.SalesOrderHeader