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

Jak získat každý N-tý řádek v MySQL

Někdy možná budete muset získat každý n-tý řádek v MySQL nebo vrátit každý n-tý řádek v tabulce. V tomto článku se podíváme na to, jak vybrat každý n-tý řádek v MySQL.


Jak získat každý N-tý řádek v MySQL

Podíváme se na dva způsoby, jak získat každý N-tý řádek v tabulce – když máte sloupec podobný id s pořadovými čísly, a když žádný nemáte.

Řekněme, že máte následující tabulku prodej (id, částka) . V našem prvním příkladu sloupec id obsahuje sekvenční ID řádků – 1, 2, 3, …

mysql> create table sales(id int, amount int);
mysql> insert into sales(id,amount)
       values(1,100),
       (2,300),
       (3,250),
       (4,150),
       (5,200);

mysql> select * from sales;
+----+--------+
| id | amount |
+----+--------+
|  1 |    100 |
|  2 |    300 |
|  3 |    250 |
|  4 |    150 |
|  5 |    200 |
+----+--------+

Bonusové čtení:Jak přidat automatický přírůstek do existující tabulky

Zde je dotaz SQL pro výběr každého n-tého řádku v MySQL.

mysql> select * from table_name where table_name.id mod n = 0;

Ve výše uvedeném dotazu v podstatě vybereme každý řádek, jehožid mod n hodnota se vyhodnotí na nulu. Dostaneme tedy řádky s id n, 2n, 3n, … Nahraďte název_tabulky s názvem vaší tabulky a n s každým n-tým řádkem, který chcete vrátit.

Zde je příklad vrácení každého 2. řádku z prodejní tabulky.

mysql> select * from sales where sales.id mod 2 = 0;
+----+--------+
| id | amount |
+----+--------+
|  2 |    300 |
|  4 |    150 |
+----+--------+

Bonusové čtení:Jak najít n-tý řádek v MySQL

Pokud vaše tabulka nemá sloupec podobný id s uloženými sekvenčními čísly, pak zde je dotaz SQL pro získání každého n-tého řádku z tabulky.

Řekněme, že máte následující tabulku prodej (datum_objednávky, částka) který nemá sloupec podobný id.

mysql> create table sales2(order_date date, amount int);

mysql> insert into sales2(order_date,amount)
       values('2020-10-01',100),
       ('2020-10-02',300),
       ('2020-10-03',250),
       ('2020-10-04',150),
       ('2020-10-05',200);

mysql> select * from sales2;
+------------+--------+
| order_date | amount |
+------------+--------+
| 2020-10-01 |    100 |
| 2020-10-02 |    300 |
| 2020-10-03 |    250 |
| 2020-10-04 |    150 |
| 2020-10-05 |    200 |
+------------+--------+

Bonusové čtení:Jak replikovat databázi MySQL na jiný server

Zde je dotaz SQL pro načtení každého n-tého řádku v MySQL.

SELECT * 
FROM ( 
    SELECT 
        @row := @row +1 AS rownum, [column name] 
    FROM ( 
        SELECT @row :=0) r, [table name] 
    ) ranked 
WHERE rownum % [n] = 0

Ve výše uvedeném dotazu nahraďte [n] n-tým řádkem, který chcete získat, nahraďte [název tabulky] názvem své tabulky a [název sloupce] názvem svého sloupce.

Ve výše uvedeném dotazu používáme vnořené dotazy. Ve vnitřním dotazu vyhodnotí a přiřadí číslo řádku pro každý řádek a uloží jej do dočasné proměnné s názvem rownum. Vnější dotaz vybere řádky s hodnotou rownum mod n nulou.

Zde je dotaz SQL pro výběr každého 2. řádku v MySQL.

mysql> SELECT *
       FROM (
           SELECT
              @row := @row +1 AS rownum, amount
          FROM (
              SELECT @row :=0) r, sales2
          ) ranked
      WHERE rownum % 2 = 0;
+--------+--------+
| rownum | amount |
+--------+--------+
|      2 |    300 |
|      4 |    150 |
+--------+--------+

Doufejme, že vám tento článek pomůže vybrat každý n-tý řádek v MySQL.

Ubiq usnadňuje vizualizaci dat a jejich sledování na řídicích panelech v reálném čase. Vyzkoušejte Ubiq zdarma.

  1. Provozní zprávy pro MySQL, MariaDB, PostgreSQL a MongoDB

  2. Jak ukládat pouze čas; není datum a čas?

  3. Vrácení transakcí Entity Framework 6

  4. Cheat sheet formátu data MySQL