Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać numer_wiersza w MySQL?

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podzapytania z EXISTS vs IN - MySQL

  2. Błąd PHP, MySQL:liczba kolumn nie odpowiada liczbie wartości w wierszu 1

  3. przekazanie LIMIT jako parametrów do MySQL sproc

  4. Jak działa funkcja TRIM() w MySQL

  5. Jak uzyskać ostatni dzień miesiąca w MySQL?