Database
 sql >> Baza danych >  >> RDS >> Database

Jak ponumerować wiersze w SQL

Problem:

Chcesz nadać każdemu wierszowi w tabeli wyników osobny numer.

Przykład:

Nasza baza danych zawiera tabelę o nazwie furniture z danymi w następujących kolumnach:code (klucz podstawowy) i name .

kod imię
101 łóżko
202 sofa
333 krzesło
123 regał
235 stół
766 biurko

furniture tabela przechowuje nazwy mebli, które chcemy ponumerować.

Rozwiązanie:

SELECT ROW_NUMBER() OVER() AS num_row,
  code, 
  name
FROM furniture;

Zapytanie zwraca numer wiersza każdego mebla wraz z jego nazwą i kodem:

num_row imię kod
1 łóżko 101
2 sofa 202
3 krzesło 333
4 regał 123
5 stół 235
6 biurko 766

Pamiętaj, że nazwy mebli nie są sortowane.

Dyskusja:

Jeśli chcesz ponumerować każdy wiersz w zestawie wyników, SQL udostępnia ROW_NUMBER() funkcjonować. Ta funkcja jest używana w SELECT klauzula z innymi kolumnami. Po ROW_NUMBER() klauzulę, wywołujemy OVER() funkcjonować. Jeśli przekażesz jakiekolwiek argumenty do OVER , numeracja wierszy nie będzie sortowana według żadnej kolumny. Tak więc kolejność wyświetlanych wierszy będzie niedeterministyczna; w większości przypadków jest to kolejność wstawiania rekordów do tabeli. Numeracja wierszy zaczyna się od 1. W naszym przykładzie każdy rekord ma numer od 1 do 6.

Możemy również przypisać numery rzędów za pomocą kolumny. W poniższym przykładzie numerujemy rekordy posortowane według nazwy. Robimy to, przekazując ten argument do OVER wraz z ORDER BY (sortuje rekordy według kolumny nazwy):

SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row,
  name, 
  code
FROM furniture;

Gdy patrzysz na zestaw wyników, widzisz posortowane wiersze z ich numerami:

wiersz imię kod
1 łóżko 101
2 regał 123
3 krzesło 333
4 biurko 766
5 sofa 202
6 stół 235

Numeracja dostarczona przez ROW_NUMBER() jest niezależna od kolejności wierszy w tabeli wynikowej. W poniższym przykładzie numerujemy rekordy używając posortowanej nazwy kolumny (OVER(ORDER BY name) ), ale wyświetlamy rekordy w zestawie wyników zgodnie z inną kolumną (w naszym przykładzie ORDER BY code ).

SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row,
  name, 
  code
FROM furniture
ORDER BY code;

Zapytanie zwróciło liczbę w każdym wierszu, ale liczby te nie są w kolejności rosnącej, ponieważ rekordy są sortowane według kodu kolumny:

wiersz imię kod
1 łóżko 101
2 regał 123
5 sofa 202
6 stół 235
3 krzesło 333
4 biurko 766

Domyślna kolejność posortowanych wierszy jest rosnąca, ale możesz także sortować w kolejności malejącej za pomocą DESC słowo kluczowe po nazwie kolumny, według której chcesz sortować:

SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS num_row,
  name, 
  code
FROM furniture
ORDER BY code DESC;

Powyższe zapytanie zwróciło zestaw wyników:

wiersz imię kod
4 biurko 766
3 krzesło 333
6 stół 235
5 sofa 202
2 regał 123
1 łóżko 101

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Model danych ubezpieczenia na życie

  2. W jaki sposób projektowanie baz danych pomaga organizować nauczycieli, lekcje i uczniów?

  3. Zrozumienie operatora przestawnego w SQL

  4. Model danych do śledzenia Twojej najcenniejszej własności

  5. Schemat płatka śniegu