SUM

SUM([DISTINCT] expr)

Additionne les valeurs de l’expression dans les lignes du groupe. Les valeurs NULL sont ignorées. S’il n’y a aucune ligne, renvoie NULL et non 0.

Paramètres

  • expr – un nombre, une colonne ou un calcul (par exemple quantity * price).
  • DISTINCT – facultatif, n’additionne que les valeurs différentes.

Exemples

Les exemples avec les tables customers, products et orders utilisent la base de données d’exemple de la série Bases du SQL.

SELECT SUM(o.quantity) AS pieces, SUM(o.quantity * p.price) AS revenue
FROM orders o
JOIN products p ON p.id = o.product_id;
+--------+---------+
| pieces | revenue |
+--------+---------+
|     15 |  202.00 |
+--------+---------+

Le chiffre d’affaires par catégorie de produits :

SELECT p.category, SUM(o.quantity * p.price) AS revenue
FROM orders o
JOIN products p ON p.id = o.product_id
GROUP BY p.category
ORDER BY revenue DESC;
+-------------+---------+
| category    | revenue |
+-------------+---------+
| Drinks      |  127.00 |
| Accessories |   49.00 |
| Tableware   |   26.00 |
+-------------+---------+

Sans lignes, la somme vaut NULL – IFNULL en fait un zéro :

SELECT SUM(quantity) AS unhandled, IFNULL(SUM(quantity), 0) AS handled
FROM orders
WHERE customer_id = 99;
+-----------+---------+
| unhandled | handled |
+-----------+---------+
|      NULL |       0 |
+-----------+---------+

Points d’attention

  • Un résultat vide donne NULL et non 0. Dans les récapitulatifs et les calculs ultérieurs, utilisez IFNULL(SUM(…), 0).
  • Additionnez les montants à partir de colonnes DECIMAL – la somme est exacte. FLOAT et DOUBLE introduisent de petites imprécisions.

Voir aussi :
COUNT()
AVG()
IFNULL()
OVER