Soustraire des valeurs numériques
Soustraire des valeurs numériques en SQL, c’est simple. On utilise l’opérateur -, comme dans les autres langages de programmation.
Soustraire des colonnes d’un tableau
Imagine que tu as un tableau nommé sales qui contient les chiffres de ventes réels et prévus :
CREATE TABLE sales (
id INT PRIMARY KEY,
actual_sales DECIMAL(10, 2),
projected_sales DECIMAL(10, 2)
);
INSERT INTO sales (id, actual_sales, projected_sales)
VALUES
(1, 1000.00, 1200.00),
(2, 1500.00, 1500.00),
(3, 1300.00, 1250.00);
Pour calculer l’écart entre les ventes réelles et les ventes prévues, tu peux écrire la requête suivante :
SELECT
id,
actual_sales,
projected_sales,
actual_sales - projected_sales AS difference
FROM
sales;
Résultat attendu :
+----+--------------+-----------------+------------+
| id | actual_sales | projected_sales | difference |
+----+--------------+-----------------+------------+
| 1 | 1000.00 | 1200.00 | -200.00 |
| 2 | 1500.00 | 1500.00 | 0.00 |
| 3 | 1300.00 | 1250.00 | 50.00 |
+----+--------------+-----------------+------------+
3 rows in set (0.00 sec)
Soustraire des dates en SQL
SQL te permet aussi de soustraire des dates pour obtenir l’écart en jours, en mois ou en années, selon le système de base de données que tu utilises.
Soustraire des dates dans MySQL
Prenons un tableau employees avec les colonnes start_date et end_date :
CREATE TABLE employees (
id INT PRIMARY KEY,
start_date DATE,
end_date DATE
);
INSERT INTO employees (id, start_date, end_date)
VALUES
(1, '2023-01-01', '2023-08-01'),
(2, '2022-05-15', '2023-05-15'),
(3, '2023-03-01', '2023-03-31');
Pour calculer l’écart en jours entre end_date et start_date, tu peux utiliser la fonction DATEDIFF :
SELECT
id,
start_date,
end_date,
DATEDIFF(end_date, start_date) AS days_difference
FROM
employees;
Résultat attendu :
+----+------------+------------+-----------------+
| id | start_date | end_date | days_difference |
+----+------------+------------+-----------------+
| 1 | 2023-01-01 | 2023-08-01 | 212 |
| 2 | 2022-05-15 | 2023-05-15 | 365 |
| 3 | 2023-03-01 | 2023-03-31 | 30 |
+----+------------+------------+-----------------+
3 rows in set (0.01 sec)
Soustraire des timestamps
Soustraire des timestamps est utile quand tu dois calculer des écarts de temps en secondes, minutes, heures, etc.
Soustraire des timestamps dans PostgreSQL
Imagine que tu as un tableau logs qui enregistre les timestamps de début et de fin d’un événement :
CREATE TABLE logs (
id SERIAL PRIMARY KEY,
start_time TIMESTAMP,
end_time TIMESTAMP
);
INSERT INTO logs (start_time, end_time)
VALUES
('2023-08-01 10:00:00', '2023-08-01 12:00:00'),
('2023-08-02 09:15:00', '2023-08-02 10:45:00');
Pour calculer l’écart en heures entre end_time et start_time, tu peux utiliser la fonction EXTRACT :
SELECT
id,
start_time,
end_time,
EXTRACT(EPOCH FROM end_time - start_time) / 3600 AS hours_difference
FROM
logs;
Résultat attendu :
id | start_time | end_time | hours_difference
----+---------------------+---------------------+--------------------
1 | 2023-08-01 10:00:00 | 2023-08-01 12:00:00 | 2.00
2 | 2023-08-02 09:15:00 | 2023-08-02 10:45:00 | 1.50
(2 rows)
Time: 9.567 ms
Soustraire entre plusieurs lignes
Dans certains cas, tu voudras soustraire des valeurs situées sur des lignes différentes. On utilise généralement pour ça les fonctions de fenêtrage.
Utilisons un tableau monthly_sales pour calculer l’écart des ventes d’un mois à l’autre :
CREATE TABLE monthly_sales (
month DATE PRIMARY KEY,
total_sales DECIMAL(10, 2)
);
INSERT INTO monthly_sales (month, total_sales)
VALUES
('2023-01-01', 2000.00),
('2023-02-01', 2200.00),
('2023-03-01', 2100.00);
Pour calculer l’écart des ventes d’un mois sur l’autre, tu peux utiliser la fonction LAG :
SELECT
month,
total_sales,
total_sales - LAG(total_sales) OVER (ORDER BY month) AS sales_difference
FROM
monthly_sales;
Résultat attendu :
month | total_sales | sales_difference
------------+-------------+------------------
2023-01-01 | 2000.00 | [NULL]
2023-02-01 | 2200.00 | 200.00
2023-03-01 | 2100.00 | -100.00
(3 rows)
Time: 5.648 ms
Conclusion
La soustraction en SQL est une opération polyvalente que tu peux appliquer aux nombres, aux dates, aux timestamps et même entre plusieurs lignes. Malgré les différences de syntaxe entre les bases de données SQL, le principe reste le même. Tout l’enjeu est de te familiariser avec ces nuances.
D’autres articles qui pourraient te plaire :
Beekeeper Studio est une interface de base de données gratuite & open source
Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.
Ce que les utilisateurs disent de Beekeeper Studio
« Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données à nouveau agréable. »
« J’ai essayé beaucoup d’interfaces de base de données, mais Beekeeper trouve l’équilibre parfait entre fonctionnalités et simplicité. Ça marche, tout simplement. »