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

Jak uzyskać każdy N-ty wiersz w MySQL

Czasami może zajść potrzeba pobrania każdego n-tego wiersza w MySQL lub zwrócenia każdego n-tego wiersza w tabeli. W tym artykule przyjrzymy się, jak wybrać każdy n-ty wiersz w MySQL.


Jak uzyskać każdy N-ty wiersz w MySQL

Przyjrzymy się dwóm sposobom uzyskania każdego N-tego wiersza w tabeli – gdy masz kolumnę typu id z kolejnymi numerami w niej i gdy jej nie masz.

Załóżmy, że masz następującą tabelę sprzedaż (identyfikator, kwota) . W naszym pierwszym przykładzie kolumna id zawiera kolejne identyfikatory wierszy – 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 |
+----+--------+

Przeczytaj bonus:Jak dodać automatyczny przyrost w istniejącej tabeli

Oto zapytanie SQL, aby wybrać co n-ty wiersz w MySQL.

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

W powyższym zapytaniu zasadniczo wybieramy każdy wiersz, którego id mod n wartość oceniana na zero. Więc otrzymujemy wiersze o identyfikatorach n, 2n, 3n, … Zastąp nazwa_tabeli z nazwą twojej tabeli i n z każdym n-tym wierszem, który chcesz zwrócić.

Oto przykład zwracania co drugi wiersz z tabeli sprzedaży.

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

Przeczytaj bonus:Jak znaleźć n-ty wiersz w MySQL

Jeśli w Twojej tabeli nie ma kolumny typu id z zapisanymi kolejnymi numerami, oto zapytanie SQL, aby uzyskać co n-ty wiersz z tabeli.

Załóżmy, że masz następującą tabelę sprzedaż(data_zamówienia, kwota) który nie ma kolumny typu 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 |
+------------+--------+

Przeczytaj bonus:Jak zreplikować bazę danych MySQL na inny serwer

Oto zapytanie SQL do pobrania każdego n-tego wiersza w MySQL.

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

W powyższym zapytaniu zastąp [n] n-tym wierszem, który chcesz uzyskać, zastąp [nazwa tabeli] nazwą swojej tabeli i [nazwa kolumny] nazwą kolumny.

W powyższym zapytaniu używamy zapytań zagnieżdżonych. W wewnętrznym zapytaniu ocenia i przypisuje numer wiersza dla każdego wiersza i przechowuje go w tymczasowej zmiennej o nazwie rownum. Zewnętrzne zapytanie wybiera wiersze z wartością rownum mod n jako zero.

Oto zapytanie SQL do wybrania co drugiego wiersza w 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 |
+--------+--------+

Mam nadzieję, że ten artykuł pomoże Ci wybrać każdy n-ty wiersz w MySQL.

Ubiq ułatwia wizualizację danych i monitorowanie ich w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj Ubiq za darmo.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oblicz decyla na podstawie aktualności w MySQL

  2. MySQL - UPDATE zapytanie oparte na SELECT Query

  3. Jak zmienić mysql na mysqli?

  4. Używanie Pythona i MySQL w procesie ETL

  5. Wprowadzanie zmian w wielu rekordach na podstawie zmiany pojedynczego rekordu za pomocą SQL