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.