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

Come confrontare due righe della stessa tabella

A volte potrebbe essere necessario confrontare righe successive o confrontare ogni riga con la riga precedente nella tabella MySQL. In questo articolo, vedremo come confrontare due righe della stessa tabella usando i self-join. Puoi usarlo per confrontare righe consecutive o ottenere differenze tra due righe.


Come confrontare righe successive in MySQL

Supponiamo che tu abbia la seguente tabella vendite (id, data_ordine, importo) e la colonna dell'importo contiene i dati sulle vendite cumulative totali.

mysql> create table sales(id int auto_increment primary key,
 order_date date, amount int);

mysql> insert into sales(order_date, amount)
     values('2020-10-01',100),
     ('2020-10-02',125),
     ('2020-10-03',140),
     ('2020-10-04',160);

mysql> select * from sales;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-10-01 |    100 |
|    2 | 2020-10-02 |    125 |
|    3 | 2020-10-03 |    140 |
|    4 | 2020-10-04 |    160 |
+------+------------+--------+

Bonus Lettura:come confrontare due colonne in MySQL

Nel nostro esempio, se vuoi scoprire le vendite effettuate ogni giorno, devi confrontare il valore dell'importo di ciascuna riga con quello della riga precedente. Ecco la query SQL per confrontare ogni riga con la riga precedente.

mysql> SELECT
         g1.id, g1.order_date,g1.amount,
         (g2.amount - g1.amount) AS daily_amount
     FROM
         sales g1 INNER JOIN sales g2 ON g2.id = g1.id + 1;
+------+------------+--------+--------------+
| id   | order_date | amount | daily_amount |
+------+------------+--------+--------------+
|    1 | 2020-10-01 |    100 |           25 |
|    2 | 2020-10-02 |    125 |           15 |
|    3 | 2020-10-03 |    140 |           20 |
+------+------------+--------+--------------+

Nella query precedente, uniamo la tabella delle vendite a se stessa utilizzando una condizione INNER JOIN g2.id=g1.id + 1 che ti consente di confrontare ogni riga con la riga precedente.

Bonus Leggi:Come ottenere ogni ennesima riga in MySQL

Tieni presente che questa condizione dipende dal fatto che la nostra colonna id ha numeri consecutivi. La maggior parte delle tabelle ha una colonna della chiave primaria con incremento automatico, quindi dovrebbe funzionare nella maggior parte dei casi. Se differiscono per qualche altra costante, puoi modificare la condizione INNER JOIN di conseguenza.

Si spera che ora sia possibile confrontare facilmente due righe nella stessa tabella in MySQL.

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