Database
 sql >> база данни >  >> RDS >> Database

Как да номерирате редове в SQL

Проблем:

Бихте искали да дадете на всеки ред в таблицата с резултати отделно число.

Пример:

Нашата база данни има таблица с име furniture с данни в следните колони:code (първичен ключ) и name .

код име
101 легло
202 диван
333 стол
123 библиотечка
235 таблица
766 бюро

furniture таблицата съхранява имената на мебелите, които искаме да номерираме.

Решение:

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

Заявката връща номера на реда на всяка мебел заедно с нейното име и код:

num_row име код
1 легло 101
2 диван 202
3 стол 333
4 библиотечка 123
5 таблица 235
6 бюро 766

Имайте предвид, че имената на мебелите не са сортирани.

Дискусия:

Ако искате да номерирате всеки ред в набор от резултати, SQL предоставя ROW_NUMBER() функция. Тази функция се използва в SELECT клауза с други колони. След ROW_NUMBER() клауза, ние наричаме OVER() функция. Ако подадете някакви аргументи на OVER , номерирането на редовете няма да бъде сортирано според нито една колона. По този начин редът на показваните редове ще бъде недетерминиран; в повечето случаи това е реда, в който записите са били вмъкнати в таблицата. Номерирането на редовете започва от 1. В нашия пример всеки запис има число от 1 до 6.

Можем също да присвоим номера на редове с помощта на колона. В примера по-долу номерираме записи, сортирани по име. Правим това, като предаваме този аргумент на OVER заедно с ORDER BY (сортира записите според колоната с име):

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

Докато разглеждате набора от резултати, виждате сортираните редове с техните номера:

row име код
1 легло 101
2 библиотечка 123
3 стол 333
4 бюро 766
5 диван 202
6 таблица 235

Номерацията, предоставена от ROW_NUMBER() е независимо от реда на редовете в таблицата с резултати. В примера по-долу номерираме записи, използвайки сортирано име на колона (OVER(ORDER BY name) ), но показваме записи в набора от резултати според друга колона (в нашия пример ORDER BY code ).

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

Заявката върна номера на всеки ред, но тези числа не са във възходящ ред, тъй като записите са сортирани според кода на колоната:

row име код
1 легло 101
2 библиотечка 123
5 диван 202
6 таблица 235
3 стол 333
4 бюро 766

Редът по подразбиране на сортираните редове е възходящ, но можете също да сортирате в низходящ ред, като използвате DESC ключова дума след името на колоната, по която искате да сортирате:

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

Заявката по-горе върна резултатния набор:

row име код
4 бюро 766
3 стол 333
6 таблица 235
5 диван 202
2 библиотечка 123
1 легло 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. Практическа употреба на функцията SQL COALESCE

  2. ScaleGrid се класира сред топ 100 доставчици на облачни услуги

  3. Ключови индикатори за проектиране на проблеми

  4. DSN файлове и IRI софтуер

  5. Как да намерите максималната стойност на числова колона в SQL