Hoe gebruik ik Row_Number ()?

Ik wil de ROW_NUMBER()gebruiken om …

te krijgen

  1. 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 …

  1. 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:

  1. 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
  2. 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 sysindexesgebruiken. Er is een kolom ROWSdie 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_Numbergebruiken 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

Other episodes