Chcę użyć, ROW_NUMBER()
aby ...
- Aby uzyskać
max(ROW_NUMBER())
-> Albo przypuszczam, że będzie to również liczba wszystkich wierszy
Próbowałem zrobić:
SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users
ale wydawało się, że nie działa ...
- Aby
ROW_NUMBER()
skorzystać z danej informacji, tj. jeśli mam imię i chcę wiedzieć, z jakiego wiersza pochodzi nazwa.
Zakładam, że byłoby to coś podobnego do tego, co próbowałem dla nr 1
SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName='Joe'
ale to też nie zadziałało ...
Jakieś pomysły?
sql
sql-server
row-number
wydający
źródło
źródło
Chociaż zgadzam się z innymi, że możesz użyć,
count()
aby uzyskać całkowitą liczbę wierszy, oto jak możesz użyćrow_count()
:Aby uzyskać całkowitą liczbę wierszy:
Aby uzyskać numery wierszy, których imię to Matt:
Możesz dalej użyć
min(rownum)
lub,max(rownum)
aby uzyskać odpowiednio pierwszy lub ostatni wiersz dla Matta.Były to bardzo proste implementacje
row_number()
. Możesz go użyć do bardziej złożonego grupowania. Sprawdź moją odpowiedź na temat grupowania zaawansowanego bez użycia zapytania podrzędnegoźródło
order by X
? Innymi słowy, jak należyX
określić? Dzięki!order by X
kolejność, w której będziesz określać kolejność, w jakiej zostaną przypisane wierszeROW_NUMBERS()
. Pamiętaj, że tabele w relacyjnych bazach danych, pomimo ich nazwy, nie mają formalnej kolejności, więc jeśli chcesz wywołać wiersz „1”, „10” lub „1337”, musisz najpierw zamówić je za pomocąORDER BY
klauzuli, która jest tym, który znajduje się wOVER (ORDER BY X)
klauzuli.Jeśli chcesz zwrócić całkowitą liczbę wierszy w tabeli, możesz użyć alternatywnego sposobu dla
SELECT COUNT(*)
instrukcji.Ponieważ
SELECT COUNT(*)
wykonuje pełne skanowanie tabeli, aby zwrócić liczbę wierszy, w przypadku dużej tabeli może to zająć bardzo dużo czasu. W takim przypadku możesz użyćsysindexes
tabeli systemowej. IstniejeROWS
kolumna zawierająca całkowitą liczbę wierszy dla każdej tabeli w bazie danych. Możesz użyć następującej instrukcji select:To znacznie skróci czas trwania zapytania.
źródło
ROW_NUMBER()
zwraca unikalną liczbę dla każdego wiersza zaczynającego się od 1. Możesz z łatwością tego użyć, pisząc po prostu:Można zobaczyć różnicę między czasem
Row_number()
,Rank()
iDense_Rank()
tu .źródło
Możesz użyć tego do pobrania pierwszego rekordu, gdzie ma klauzulę
źródło
źródło
TABLE
lubVIEW
słowa kluczowego ... ale naSELECT
pewno! -)Może nie mieć związku z tym pytaniem. Ale odkryłem, że może być przydatny podczas używania
ROW_NUMBER
-źródło
źródło
Jeśli absolutnie chcesz użyć w tym celu ROW_NUMBER (zamiast count (*)), zawsze możesz użyć:
źródło
Możesz użyć
Row_Number
do ograniczenia wyniku zapytania.Przykład:
- Przy powyższym zapytaniu otrzymam STRONĘ 1 wyników z
TABLENAME
.źródło
Trzeba stworzyć wirtualną tabelę za pomocą
WITH table AS
, o której wspomina się w danym zapytaniu.Korzystając z tej tabeli wirtualnej, można wykonać operację CRUD wrt
row_number
.PYTANIE:
Możesz użyć
INSERT
,UPDATE
lubDELETE
w ostatnim zdaniu przez pomimoSELECT
.źródło
Funkcja SQL Row_Number () służy do sortowania i przypisywania numeru zamówienia do wierszy danych w powiązanym zestawie rekordów. Jest więc używany do numerowania wierszy, na przykład do identyfikowania pierwszych 10 wierszy, które mają najwyższą kwotę zamówienia lub do identyfikowania zamówienia każdego klienta, które jest najwyższą kwotą itp.
Jeśli chcesz posortować zbiór danych i ponumerować każdy wiersz, rozdzielając je na kategorie, używamy Row_Number () z klauzulą Partition By. Na przykład sortowanie zamówień każdego klienta w sobie, gdzie zestaw danych zawiera wszystkie zamówienia itp.
Ale jak rozumiem, chcesz obliczyć liczbę wierszy pogrupowanych według kolumny. Aby zwizualizować wymaganie, jeśli chcesz zobaczyć liczbę wszystkich zamówień powiązanego klienta jako oddzielną kolumnę oprócz informacji o zamówieniu, możesz użyć funkcji agregującej COUNT () z klauzulą Partition By
Na przykład,
źródło
To zapytanie:
zwróci wszystkie wiersze, w których
UserName
jest,'Joe'
JEŚLI nie maszUserName='Joe'
Zostaną wyświetlone w kolejności,
UserID
arow_number
pole będzie rozpoczynać się od 1 i zwiększać się niezależnie od liczby wierszyUserName='Joe'
Jeśli to nie zadziała, oznacza to, że
WHERE
wystąpił problem z Twoim poleceniem LUB nie ma goUserID
w tabeli. Sprawdź pisownię w obu polachUserID
iUserName
.źródło