sql >> Database >  >> RDS >> Database

Hoe twee rijen uit dezelfde tabel te vergelijken

Soms moet u opeenvolgende rijen vergelijken of elke rij vergelijken met de vorige rij in de MySQL-tabel. In dit artikel zullen we bekijken hoe u twee rijen uit dezelfde tabel kunt vergelijken met behulp van self-joins. Je kunt het gebruiken om opeenvolgende rijen te vergelijken of om het verschil tussen twee rijen te krijgen.


Hoe opeenvolgende rijen in MySQL te vergelijken

Stel dat u de volgende tabel verkoop (id, order_date, bedrag) . heeft en bedragkolom bevat totale cumulatieve verkoopgegevens.

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 lezen:twee kolommen vergelijken in MySQL

Als u in ons voorbeeld de verkopen van elke dag wilt weten, moet u de waarde van elke rij vergelijken met die van de vorige rij. Hier is de SQL-query om elke rij te vergelijken met de vorige rij.

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

In de bovenstaande query voegen we de verkooptabel met zichzelf samen met behulp van een INNER JOIN-voorwaarde g2.id=g1.id + 1 waarmee u elke rij kunt vergelijken met de vorige rij.

Bonus lezen:hoe u elke N-de rij in MySQL kunt krijgen

Let op, deze voorwaarde is afhankelijk van het feit dat onze id-kolom opeenvolgende nummers heeft. De meeste tabellen hebben een auto-increment primaire sleutelkolom, dus deze zou in de meeste gevallen moeten werken. Als ze door een andere constante verschillen, kunt u de INNER JOIN-voorwaarde dienovereenkomstig wijzigen.

Hopelijk kun je nu gemakkelijk twee rijen in dezelfde tabel vergelijken in MySQL.

Ubiq maakt het eenvoudig om data te visualiseren en te monitoren in realtime dashboards. Probeer Ubiq gratis.

  1. Hoe Airflow te verbinden met de Oracle-database

  2. De backend-versie wordt niet ondersteund om databasediagrammen of tabellen te ontwerpen

  3. SQL Natural Join

  4. Functie om het aantal weekdagen tussen twee datums te krijgen, exclusief feestdagen