Понякога може да се наложи да сравните последователни редове или да сравните всеки ред с предишния ред в таблицата на MySQL. В тази статия ще разгледаме как да сравним два реда от една и съща таблица с помощта на самообединяване. Можете да го използвате, за да сравните последователни редове или да получите разлика между два реда.
Как да сравнявам последователни редове в MySQL
Да приемем, че имате следната таблица продажби (идентификатор, дата_на_поръчка, сума) и колоната сума съдържа общи кумулативни данни за продажбите.
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 | +------+------------+--------+
Бонус за четене:Как да сравним две колони в MySQL
В нашия пример, ако искате да разберете продажбите, направени всеки ден, тогава трябва да сравните стойността на всеки ред с тази на предишния ред. Ето SQL заявката за сравнение на всеки ред с предишния.
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 | +------+------------+--------+--------------+
В горната заявка свързваме таблицата за продажби със самата нея, като използваме условие INNER JOIN g2.id=g1.id + 1, което ви позволява да сравните всеки ред с предишния му ред.
Бонус четене:Как да получите всеки N-ти ред в MySQL
Моля, имайте предвид, че това условие зависи от факта, че колоната ни за идентификация има последователни числа. Повечето таблици имат колона с първичен ключ с автоматично увеличение, така че трябва да работи в повечето случаи. Ако се различават с друга константа, можете да промените съответно условието INNER JOIN.
Надяваме се, че сега можете лесно да сравните два реда в една и съща таблица в MySQL.
Ubiq улеснява визуализирането на данни и наблюдението им в табла за управление в реално време. Опитайте Ubiq безплатно.