sql >> Databasteknik >  >> RDS >> Database

Hur man jämför två rader från samma tabell

Ibland kan du behöva jämföra på varandra följande rader, eller jämföra varje rad med föregående rad i MySQL-tabellen. I den här artikeln kommer vi att titta på hur man jämför två rader från samma tabell med hjälp av självkopplingar. Du kan använda den för att jämföra på varandra följande rader eller få skillnad mellan två rader.


Hur man jämför på varandra följande rader i MySQL

Låt oss säga att du har följande tabell försäljning (id, order_date, summa) och beloppskolumnen innehåller totala kumulativa försäljningsdata.

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 Läs:Hur man jämför två kolumner i MySQL

I vårt exempel, om du vill ta reda på försäljningar gjorda varje dag måste du jämföra varje rads beloppsvärde med föregående rad. Här är SQL-frågan för att jämföra varje rad med föregående rad.

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

I ovanstående fråga sammanfogar vi försäljningstabellen med sig själv genom att använda ett INNER JOIN-villkor g2.id=g1.id + 1 som låter dig jämföra varje rad med dess föregående rad.

Bonusläs:Hur man får varje N:te rad i MySQL

Observera att detta villkor beror på att vår id-kolumn har på varandra följande nummer. De flesta tabeller har en kolumn för primärnyckel automatiskt inkrement så det borde fungera i de flesta fall. Om de skiljer sig med någon annan konstant kan du modifiera INNER JOIN-villkoret i enlighet med detta.

Förhoppningsvis kan du nu enkelt jämföra två rader i samma tabell i MySQL.

Ubiq gör det enkelt att visualisera data och övervaka dem i realtidsinstrumentpaneler. Prova Ubiq gratis.

  1. SQL Server Hög tillgänglighet:Installera SQL Server-failover-klustrad instans del 2

  2. Inaktivera och senare aktivera alla tabellindex i Oracle

  3. Grundläggande om tabelluttryck, del 3 – Härledda tabeller, optimeringsöverväganden

  4. Hur kör jag PHP som är lagrad i en MySQL-databas?