Parfois, vous devrez peut-être comparer des lignes successives ou comparer chaque ligne avec la ligne précédente dans la table MySQL. Dans cet article, nous verrons comment comparer deux lignes d'une même table à l'aide d'auto-jointures. Vous pouvez l'utiliser pour comparer des lignes consécutives ou obtenir la différence entre deux lignes.
Comment comparer des lignes successives dans MySQL
Disons que vous avez le tableau suivant ventes (id, date_commande, montant) et la colonne de montant contient les données de ventes cumulées totales.
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 | +------+------------+--------+
Lecture bonus :Comment comparer deux colonnes dans MySQL
Dans notre exemple, si vous souhaitez connaître les ventes effectuées chaque jour, vous devez comparer la valeur du montant de chaque ligne avec celle de la ligne précédente. Voici la requête SQL pour comparer chaque ligne avec la ligne précédente.
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 | +------+------------+--------+--------------+
Dans la requête ci-dessus, nous joignons la table des ventes avec elle-même en utilisant une condition INNER JOIN g2.id=g1.id + 1 qui vous permet de comparer chaque ligne avec sa ligne précédente.
Lecture bonus :Comment obtenir chaque Nième ligne dans MySQL
Veuillez noter que cette condition dépend du fait que notre colonne id comporte des numéros consécutifs. La plupart des tables ont une colonne de clé primaire à incrémentation automatique, elle devrait donc fonctionner dans la plupart des cas. S'ils diffèrent par une autre constante, vous pouvez modifier la condition INNER JOIN en conséquence.
Heureusement, vous pouvez maintenant facilement comparer deux lignes dans la même table dans MySQL.
Ubiq facilite la visualisation des données et leur suivi dans des tableaux de bord en temps réel. Essayez Ubiq gratuitement.