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ś!