Czasami może być konieczne uzyskanie numeru wiersza w MySQL do raportowania i analizy. Numer wiersza jest bardzo przydatny w rankingu i sortowaniu danych. Jest również pomocny w filtrowaniu danych na podstawie wartości numeru wiersza. W tym artykule przyjrzymy się, jak uzyskać numer_wiersza w MySQL.
Jak uzyskać row_number w MySQL
Funkcja Row_number() jest dostępna po wyjęciu z pudełka od wersji MySQL 8.0.
Oto składnia row_number() składnia. Pamiętaj, że klauzula PARTITION BY jest opcjonalna.
ROW_NUMBER() OVER (
PARTITION BY <expression(s)>
ORDER BY <expression(s)> [ASC|DESC]) Powiedzmy, że masz następującą sprzedaż tabela.
+------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2021-01-01 | 200 | | 2 | 2021-01-02 | 250 | | 3 | 2021-01-03 | 220 | | 4 | 2021-01-04 | 230 | | 5 | 2021-01-05 | 210 | | 6 | 2021-01-06 | 100 | | 7 | 2021-01-07 | 120 | | 8 | 2021-01-08 | 150 | | 9 | 2021-01-09 | 180 | | 10 | 2021-01-10 | 200 | +------+------------+--------+
Oto przykład użycia numeru wiersza funkcja do uszeregowania wierszy w kolejności malejącej od kwota kolumna.
mysql> select row_number() over (
order by amount desc) row_num,
amount
from sales
order by amount desc;
+---------+--------+
| row_num | amount |
+---------+--------+
| 1 | 250 |
| 2 | 230 |
| 3 | 220 |
| 4 | 210 |
| 5 | 200 |
| 6 | 200 |
| 7 | 180 |
| 8 | 150 |
| 9 | 120 |
| 10 | 100 |
+---------+--------+ W powyższym zapytaniu traktujemy całą tabelę jako pojedynczą partycję i nie udostępniamy klauzuli PARTITION BY. Porządkujemy również te wiersze w kolejności malejącej według kolumny kwoty i używamy row_number() funkcji, aby uszeregować te wiersze.
Jeśli jednak używasz MySQL <8.0, oto kroki, aby uzyskać numer_wiersza w MySQL.
mysql> SELECT t.*, @rownum := @rownum + 1 AS rank
FROM sales t, (SELECT @rownum := 0) r
order by amount desc;
+------+---------------------+--------+------+
| id | order_date | amount | rank |
+------+---------------------+--------+------+
| 1 | 2021-02-02 08:15:00 | 250 | 1 |
| 10 | 2021-02-02 11:15:00 | 250 | 2 |
| 5 | 2021-02-02 09:30:00 | 250 | 3 |
| 9 | 2021-02-02 10:45:00 | 200 | 4 |
| 12 | 2021-02-02 11:45:00 | 200 | 5 |
| 6 | 2021-02-02 09:45:00 | 200 | 6 |
| 2 | 2021-02-02 08:30:00 | 200 | 7 |
| 7 | 2021-02-02 10:15:00 | 180 | 8 |
| 3 | 2021-02-02 08:55:00 | 150 | 9 |
| 11 | 2021-02-02 11:30:00 | 150 | 10 |
| 4 | 2021-02-02 09:15:00 | 125 | 11 |
| 8 | 2021-02-02 10:30:00 | 125 | 12 |
+------+---------------------+--------+------+ W powyższym zapytaniu SQL używamy tymczasowej zmiennej rownum aby zapisać numer wiersza. Gdy MySQL sekwencyjnie przemierza wiersze, przypisuje rownum do każdego wiersza w sposób przyrostowy.
Potrzebujesz narzędzia do raportowania dla MySQL? Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!