Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere ogni ennesima riga in MySQL

A volte potrebbe essere necessario ottenere ogni ennesima riga in MySQL o restituire ogni ennesima riga nella tabella. In questo articolo vedremo come selezionare ogni ennesima riga in MySQL.


Come ottenere ogni ennesima riga in MySQL

Vedremo due modi per ottenere ogni ennesima riga in una tabella:quando hai una colonna simile a un id con numeri sequenziali e quando non ne hai uno.

Supponiamo che tu abbia la seguente tabella vendite (id, importo) . Per il nostro primo esempio, la colonna id contiene ID di riga sequenziali: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 |
+----+--------+

Bonus Leggi:Come aggiungere l'incremento automatico nella tabella esistente

Ecco la query SQL per selezionare ogni ennesima riga in MySQL.

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

Nella query precedente, selezioniamo fondamentalmente ogni riga il cui id mod n il valore restituisce zero. Quindi otteniamo righe con id n, 2n, 3n, ... Sostituisci nome_tabella con il nome della tabella e n con ogni ennesima riga che desideri restituire.

Ecco un esempio per restituire ogni seconda riga dalla tabella di vendita.

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

Bonus Leggi:Come trovare l'ennesima riga in MySQL

Se la tua tabella non ha una colonna simile a un ID con numeri sequenziali memorizzati, ecco la query SQL per ottenere ogni ennesima riga dalla tabella.

Supponiamo che tu abbia la seguente tabella vendite(data_ordine, importo) che non ha una colonna simile a un 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 |
+------------+--------+

Bonus Leggi:Come replicare il database MySQL su un altro server

Ecco la query SQL per recuperare ogni ennesima riga in MySQL.

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

Nella query precedente, sostituisci [n] con l'ennesima riga che desideri ottenere, sostituisci [nome tabella] con il nome della tabella e [nome colonna] con il nome della colonna.

Nella query precedente, utilizziamo query nidificate. Nella query interna valuta e assegna il numero di riga per ogni riga e lo memorizza in una variabile temporanea chiamata rownum. La query esterna seleziona le righe con il valore rownum mod n pari a zero.

Ecco la query SQL per selezionare ogni seconda riga in 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 |
+--------+--------+

Si spera che questo articolo ti aiuti a selezionare ogni ennesima riga in MySQL.

Ubiq semplifica la visualizzazione dei dati e il monitoraggio in dashboard in tempo reale. Prova Ubiq gratuitamente.