SQL, ce n’est pas que du texte et des tables. Dans les vraies bases de données, tu dois souvent gérer des prix, quantités, points, pourcentages, coordonnées, bref, des nombres. Imagine :
- Tu calcules des réductions et tu veux arrondir le montant à l’entier le plus proche.
- Tu veux afficher les données pour les étudiants pairs/impairs.
- Tu fais de l’analytics sur les notes et tu veux connaître la racine carrée de la variance.
- Ou tu construis des formules de calcul de points avec des puissances.
SQL peut gérer tout ça sans avoir besoin d’un autre langage de programmation — tu peux tout faire direct dans tes requêtes grâce aux fonctions mathématiques intégrées. Aujourd’hui, on va voir les six plus utiles :
ROUND()— arrondiCEIL()— arrondi vers le hautFLOOR()— arrondi vers le basMOD()— reste de la divisionPOWER()— puissanceSQRT()— racine carrée
* Arrondir les nombres : ROUND(), CEIL(), FLOOR()*
Souvent, quand tu bosses avec des nombres à virgule (genre 4.67891), tu dois arrondir le résultat. Par exemple, si tu calcules une moyenne, le prix total d’une commande, un pourcentage de réduction, etc., — trop de chiffres après la virgule, ça fait moche et ça peut embrouiller.
ROUND() — arrondi classique, comme en maths
ROUND(number [, digits])
number— le nombre à arrondir.digits(optionnel) — combien de chiffres après la virgule tu veux garder.
Exemples :
SELECT ROUND(4.67); -- 5
SELECT ROUND(4.6789, 2); -- 4.68
ROUND() fonctionne comme l’arrondi habituel en maths : 4.5 → 5, 4.49 → 4.
Super utile si tu bosses avec de l’argent ou des points que tu veux afficher proprement : 4.33333 → 4.33.
CEIL() — arrondi vers le haut à l’entier supérieur
SELECT CEIL(4.1); -- 5
- Si le nombre est déjà entier, ça ne change rien.
- Renvoie toujours un entier, pas plus petit que l’original.
Pratique, par exemple, pour calculer combien de pages il faut pour afficher des produits : 21 produits, 10 par page → il faut 3 pages.
FLOOR() — arrondi vers le bas
SELECT FLOOR(4.9); -- 4
- Renvoie l’entier pas plus grand que l’original.
Utilisé quand tu veux savoir sur quel "palier" ou "niveau" se trouve une valeur.
Comparaison :
| Valeur | ROUND() | CEIL() | FLOOR() |
|---|---|---|---|
| 4.4 | 4 | 5 | 4 |
| 4.6 | 5 | 5 | 4 |
| -4.6 | -5 | -4 | -5 |
* Reste de la division : MOD()*
Pourquoi le reste est utile ? Par exemple :
- Vérifier si un nombre est pair.
- Diviser des lignes en groupes selon un modèle (genre, répartir en 3 équipes).
- Faire une boucle répétitive (genre, "chaque cinquième enregistrement").
Syntaxe :
MOD(dividend, divisor)
Exemples :
SELECT MOD(17, 5); -- 2 (3*5 +2)
SELECT MOD(10, 3); -- 1 (3*3 +1)
Attention : le signe du reste dépend du signe du premier argument (dividend).
Utilisation :
SELECT student_id,
CASE WHEN MOD(student_id, 2) = 0 THEN 'Pair' ELSE 'Impair' END AS parite
FROM students;
* Puissance : POWER()*
Parfois, tu dois pas juste multiplier, mais utiliser des formules mathématiques :
- Calcul d’intérêts :
base * POWER(1 + rate, years) - Surface d’un cercle :
π * r^2 - Pondération de formules en machine learning
Syntaxe :
POWER(base, exponent)
Exemples :
SELECT POWER(2, 3); -- 8
SELECT POWER(5, 2); -- 25
SELECT POWER(9, 0.5); -- 3 (racine carrée)
La fonction accepte tous les nombres : entiers, décimaux, négatifs.
Racine carrée : SQRT()
Si tu dois calculer une racine, surtout en stats (genre écart-type), SQRT() va t’être utile.
SELECT SQRT(25); -- 5
SELECT SQRT(2); -- ~1.4142
Si tu passes un nombre négatif — ça plante. Si c’est possible dans tes données, utilise ABS() :
SELECT SQRT(ABS(-25)); -- 5
Scénarios pratiques
Scénario 1 : arrondir le montant total d’une commande
SELECT order_id, ROUND(total_price, 0) AS total_arrondi
FROM orders;
Scénario 2 : calculer le nombre de pages à afficher
SELECT CEIL(COUNT(*) / 10.0) AS pages_necessaires
FROM products;
Scénario 3 : répartir les étudiants en 3 groupes
SELECT student_id,
MOD(student_id, 3) AS numero_groupe
FROM students;
Scénario 4 : racine de la moyenne des carrés
SELECT SQRT(AVG(POWER(score, 2))) AS racine_moyenne_carre
FROM grades;
Erreurs classiques et conseils
ROUND() peut prendre un deuxième argument — pense-y si tu veux arrondir aux centièmes.
MOD() avec des nombres négatifs peut donner des résultats chelous.
POWER() et SQRT() marchent avec des arguments décimaux — utilise CAST() si besoin.
Vérifie que tu ne passes pas de nombre négatif à SQRT(), sinon tu vas avoir une erreur d’exécution.
GO TO FULL VERSION