logo

Funkcja RANK w SQL Server

Funkcja RANK w SQL Server jest rodzajem funkcji rankingowej. Ta funkcja będzie przypisz numer do każdego wiersza w obrębie podziału wyjścia . Przypisuje rangę do każdego wiersza jako jeden plus ranga poprzedniego wiersza. Gdy funkcja RANK znajdzie dwie identyczne wartości w tej samej partycji, przypisuje im ten sam numer rangi. Dodatkowo kolejną liczbą w rankingu będzie pozycja poprzednia plus zduplikowane liczby. Dlatego ta funkcja nie zawsze przypisuje ranking wierszy w kolejnej kolejności.

Funkcja RANK jest także częścią funkcji okna. Podczas korzystania z tej funkcji należy pamiętać o następujących kwestiach :

  • Zawsze działa z klauzulą ​​OVER().
  • Przypisuje rangę każdemu wierszowi na podstawie klauzuli ORDER BY.
  • Przypisuje rangę do każdego wiersza w następującej kolejności.
  • Zawsze przypisuje rangę wierszom, zaczynając od jednej dla każdej nowej partycji.

UWAGA: Ranga przypisuje tymczasowe wartości wierszom w partycji podczas wykonywania zapytania.

SQL Server udostępnia następujące funkcje rangi :

  • RANGA()
  • NUMER WIERSZA()
  • DENSE_RANK()
  • NTYL()

Przyjrzyjmy się szczegółowo każdej funkcji rangi. Najpierw utworzymy tabelę do demonstracji wszystkich tych funkcji. Poniższe instrukcje tworzą tabelę o nazwie ranking_demo z trzema kolumnami:

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

Następnie wstawimy kilka wierszy do tej tabeli, jak poniżej:

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

Tablicę możemy zweryfikować za pomocą instrukcji SELECT. Wyświetla poniższe dane wyjściowe:

Funkcja RANK w SQL Server

RANK() Funkcja

Ta funkcja służy do określenia rangi każdego wiersza w zestawie wyników. Poniższa składnia ilustruje użycie funkcji RANK w SQL Server:

 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

W tej składni

  • The Klauzula OVER ustawia podział i kolejność wyniku przed zastosowaniem powiązanej funkcji okna.
  • The Klauzula PARTITION BY dzieli wynik uzyskany za pomocą klauzuli FROM na partycję. Następnie funkcja jest stosowana do każdej partycji i ponownie inicjowana, gdy granica podziału przekroczy partycje. Jeśli nie zdefiniowaliśmy tej klauzuli, funkcja potraktuje wszystkie wiersze jako pojedynczą partycję.
  • The ZAMÓW PRZEZ to wymagana klauzula, która określa kolejność wierszy w sposób malejący lub rosnący na podstawie jednej lub większej liczby nazw kolumn przed zastosowaniem funkcji.

Przykład

Zobaczmy, jak działa funkcja RANK() w SQL Server. Poniższa instrukcja użyje funkcji rank do przypisania numeracji każdemu wierszowi:

 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

Ponieważ nie korzystaliśmy z Klauzula PARTITION BY , funkcja traktowała cały wynik jako pojedynczą partycję. Wykonanie instrukcji wyświetli poniższe dane wyjściowe:

Funkcja RANK w SQL Server

W tym wyniku widzimy, że niektóre wiersze uzyskują tę samą rangę, ponieważ mają tę samą wartość w pliku kolumna miejska . Kolejną liczbą w rankingu będzie jej poprzednia pozycja plus liczba zduplikowanych liczb.

Poniższe stwierdzenie jest inny przykład gdzie użyjemy klauzuli „podział według”, która podzieli wiersze na podstawie miasto kolumnę i przypisz ranking do każdego wiersza w obrębie partycji. Kolejność wyników jest oparta na imię :

 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

Wyświetli poniższe dane wyjściowe:

Funkcja RANK w SQL Server

Funkcja ROW_NUMBER().

Ta funkcja jest do tego przyzwyczajona zwraca unikalny numer kolejny dla każdego wiersza w jego przegrodzie. Numeracja wierszy zaczyna się od jednego i zwiększa się o jeden, aż do osiągnięcia całkowitej liczby wierszy partycji. Zwróci różne rangi dla wiersza o podobnych wartościach, które odróżniają go od funkcji RANK().

Poniższa składnia ilustruje użycie funkcji ROW_NUMBER() w SQL Server:

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Przykład

Wykonaj następujące zapytanie, aby przypisać numer kolejny do każdego wiersza:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Przydzieli ranking tabeli zgodnie z ich miasto . Tutaj widzimy, że przypisuje różne rangi wierszowi, który ma te same wartości miast.

Funkcja RANK w SQL Server

Jeśli zmienimy kolejność sortowania z rosnąco i malejąco z klauzulą ​​ORDER BY, funkcja ta również odpowiednio zmieni RANK. Zobacz poniższe oświadczenie:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

Oto wynik:

Funkcja RANK w SQL Server

Funkcja DENSE_RANK().

Ta funkcja przypisuje unikalna ranga dla każdego wiersza w partycji zgodnie z określoną wartością kolumny, bez żadnych przerw. Zawsze określa ranking w następującej kolejności. Jeśli otrzymamy A zduplikowana wartość , funkcja ta przypisze mu tę samą rangę, a następna ranga będzie kolejnym numerem porządkowym. Ta cecha różni się funkcją DENSE_RANK() od funkcji RANK().

Poniższa składnia ilustruje użycie funkcji DENSE_RANK() w SQL Server:

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Przykład

Poniższe zapytanie wykorzystuje funkcję DENSE_RANK() w celu przypisania numeru rangi dla każdego wiersza:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Zwróci poniższe dane wyjściowe, gdzie możemy zobaczyć, że zduplikowane wartości mają tę samą rangę, a następna ranga będzie kolejnym numerem sekwencyjnym.

Funkcja RANK w SQL Server

Jest to kolejny przykład funkcji DENSE_RANK() wykorzystującej klauzulę PARTITION BY. Ta klauzula podzieli wiersze na podstawie kolumny miasta, a kolejność zestawu wyników będzie oparta na pierwszym_imię:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

Otrzymamy poniższe dane wyjściowe, ponieważ nie ma dwóch takich samych nazw. W tym przypadku wynik jest podobny do funkcji RANK().

Funkcja RANK w SQL Server

Zaktualizujmy nazwę za pomocą następującego zapytania:

 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

Teraz wykonaj ponownie to samo zapytanie. Zobaczymy, że ta tabela ma tę samą nazwę Miasto Kalifornia . Dlatego ranga jest również taka sama dla obu nazw.

Funkcja RANK w SQL Server

Funkcja NTILE(N).

Ta funkcja jest do tego przyzwyczajona rozdziel rzędy uporządkowanej partycji na z góry określoną liczbę (N) w przybliżeniu równych grup. Każda grupa wierszy otrzymuje swoją rangę na podstawie zdefiniowanego warunku i rozpoczyna numerację od jednej grupy. Przypisuje A numer wiadra dla każdego wiersza w grupie reprezentującej grupę, do której należy.

Poniższa składnia ilustruje użycie funkcji NTILE() w SQL Server:

konwersja ciągu na int
 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Przykład

Poniższe zapytanie używa funkcji NTILE() do przypisania numeru rangi dla każdego wiersza:

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Podana tabela ma osiem rekordów . Dlatego też NTYL(3) mówi, że zestaw wyników musi mieć a grupa trzech rekordów . Wykonanie instrukcji wyświetli poniższe dane wyjściowe:

Funkcja RANK w SQL Server

W tym artykule wyjaśnione zostaną wszystkie funkcje RANK używane w SQL Server na różnych przykładach. Pokazuje także główne różnice pomiędzy tymi funkcjami. Funkcje te są bardzo przydatne dla programistów do dobrego eksplorowania danych i zarządzania nimi.