sql >> Databáze >  >> RDS >> Mysql

Jak získat row_number v MySQL

Někdy můžete potřebovat získat číslo řádku v MySQL pro vytváření sestav a analýzu. Číslo řádku je velmi užitečné při řazení a řazení dat. Je také užitečné při filtrování dat na základě hodnoty čísla řádku. V tomto článku se podíváme na to, jak získat číslo_řádku v MySQL.


Jak získat row_number v MySQL

Funkce Row_number() je k dispozici již od verze MySQL 8.0.

Zde je syntaxe row_number() syntax. Upozorňujeme, že klauzule PARTITION BY je volitelná.

ROW_NUMBER() OVER (
     PARTITION BY <expression(s)> 
     ORDER BY <expression(s)> [ASC|DESC])

Řekněme, že máte následující prodeje tabulka.

 +------+------------+--------+
 | 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 |
 +------+------------+--------+

Zde je příklad použití číslo_řádku funkce pro řazení řádků v sestupném pořadí podle částky sloupec.

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 |
 +---------+--------+

Ve výše uvedeném dotazu považujeme celou tabulku za jeden oddíl a neposkytujeme klauzuli PARTITION BY. Tyto řádky také řadíme sestupně podle sloupce částky a používáme číslo_řádku() funkce pro hodnocení těchto řádků.

Pokud však používáte MySQL <8.0, pak zde jsou kroky k získání row_number v 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 |
 +------+---------------------+--------+------+

Ve výše uvedeném SQL dotazu používáme dočasnou proměnnou rownum pro uložení čísla řádku. Když MySQL postupně prochází řádky, přiřadí rownum do každého řádku postupně.

Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Zkuste to ještě dnes!

  1. Jak funguje funkce LOCATE() v MySQL

  2. Můžete volat webovou službu z kódu TSQL?

  3. 'IF' v příkazu 'SELECT' - zvolte výstupní hodnotu na základě hodnot sloupců

  4. Jak otestovat metody, které se zabývají databází SQLite v Androidu?