CodeGym /Cours /SQL SELF /Fonctions numériques en SQL : arrondi, reste, puissance e...

Fonctions numériques en SQL : arrondi, reste, puissance et racine

SQL SELF
Niveau 8 , Leçon 3
Disponible

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() — arrondi
  • CEIL() — arrondi vers le haut
  • FLOOR() — arrondi vers le bas
  • MOD() — reste de la division
  • POWER() — puissance
  • SQRT() — 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.333334.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.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION