🧚 Écoute ! Beekeeper Studio est une interface de base de données rapide, moderne et open source Télécharger
23 août 2024 Par Matthew Rathbone

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.

La version Linux de Beekeeper est 100% complète : rien de bâclé, aucun compromis sur les fonctionnalités.

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. »
— Alex K., développeur de bases de données
★★★★★
« 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. »
— Sarah M., ingénieure full stack