Retour à la liste des articles Articles
9 minutes de lecture

Comment utiliser la fonction ROUND() en SQL

Vous avez besoin d'arrondir des résultats numériques en SQL ? La fonction ROUND() est là pour faire le travail.

Les bases de données relationnelles modernes offrent de nombreuses fonctions intégrées qui étendent les capacités de SQL. Dans cet article, nous allons utiliser des exemples pratiques pour expliquer le fonctionnement de la fonction ROUND(). (Alerte spoiler : si vous avez deviné qu'elle arrondit un nombre à une certaine décimale, vous avez raison ! Continuez à lire pour en savoir plus).

Fonctions standard SQL

Chaque base de données SQL (PostgreSQL, MySQL, Oracle, SQL Server, entre autres) possède un ensemble de fonctions intégrées. Pour comprendre ce que cela signifie, parlons des fonctions.

Une fonction est un morceau de code prédéfini qui transforme ses arguments en un résultat. Par exemple, la fonction SUBSTRING() reçoit une chaîne de caractères (c'est-à-dire un mot, une phrase, etc.) comme argument et renvoie une partie de cette chaîne. D'autres fonctions comme MAX() (qui renvoie la valeur la plus grande) et MIN() (qui renvoie la valeur la plus petite) traitent des données numériques ; vous pouvez en savoir plus sur ces fonctions dans l'article What Are the SQL MIN() and MAX() Functions ?

Une fonction peut être appelée dans une requête SQL chaque fois que vous avez besoin de fournir une valeur. Vous pouvez appeler une fonction dans la liste de colonnes SELECT, dans la condition WHERE, ou à tout autre endroit de la requête où une valeur doit être fournie. Il existe un grand nombre de fonctions en SQL, et chaque base de données SQL fournit un ensemble différent de fonctions.

Si vous recherchez un cours complet sur les fonctions en SQL, consultez notre formation interactive sur Fonctions SQL standards. Il couvre les fonctions SQL de base et avancées et vous fournit tout ce dont vous avez besoin pour commencer à les utiliser afin de traiter les données numériques, textuelles et autres dans les bases de données SQL.

Qu'est-ce que la fonction SQL ROUND() ?

La fonction ROUND de SQL est utilisée pour arrondir un nombre donné au nombre entier le plus proche ou à une certaine décimale. Nous allons montrer plusieurs exemples de requêtes utilisant la fonction ROUND(), mais nous allons d'abord présenter une table SQL type appelée sales. Cette table enregistre les données de vente d'un petit marché. Certains produits (comme les œufs ou les légumes) sont vendus en fonction de leur poids ; dans ce cas, la colonne quantity enregistre le nombre de kilos vendus, qui peut inclure des chiffres décimaux.

dateselleritemQuantity (in units or kilos)unit_pricetotal
2021-12-06CharlesSoda Bbg 500Ml23.236.46
2021-12-06CharlesIce Cream 10Oz22.765.52
2021-12-06CharlesEgg Pack HpyHen1.20.750.9375
2021-12-06CharlesBanana Ecuador1.872.544.7498
2021-12-07CharlesShampoo A10040.993.96
2021-12-07CharlesBatteries A3101.5315.30
2021-12-07MaryCandy Pack B2012.152.15
2021-12-07MaryBanana Ecuador1.472.543.7338
2021-12-07MaryIce Cream 10Oz12.762.76
2021-12-07MarySoda Bbg 500Ml13.233.23
2021-12-08CharlesEgg Pack HpyHen1.430.751.0725

Commençons par présenter une requête simple utilisant la fonction ROUND() en SQL standard. Si nous examinons la colonne total dans le tableau ci-dessus, nous pouvons voir quelques enregistrements. sales tableau ci-dessus, nous pouvons voir quelques enregistrements dont la valeur comporte trois chiffres décimaux. Supposons que nous voulions un rapport montrant toutes les ventes, mais que nous ne voulons qu'un maximum de 2 chiffres décimaux dans la colonne total. Voici la requête que nous utiliserions :

SELECT 
  date, 
  seller, 
  item, 
  quantity, 
  unit_price, 
  ROUND(total, 2) AS total
FROM sales

Nous pouvons voir que la fonction ROUND() reçoit deux paramètres. Le premier est la valeur numérique à arrondir (c'est-à-dire la colonne total ) ; le second est appelé precision et indique le nombre de chiffres décimaux que nous voulons conserver dans le nombre arrondi. Le résultat de cette requête est présenté ci-dessous :

dateselleritemquantityunit_pricetotal
2021-12-06CharlesSoda Bbg 500Ml23.236.46
2021-12-06CharlesIce Cream 10Oz22.765.52
2021-12-06CharlesEgg Pack HpyHen1.20.750.94
2021-12-06CharlesBanana Ecuador1.872.544.75
2021-12-07CharlesShampoo A10040.993.96
2021-12-07CharlesBatteries A3101.5315.30
2021-12-07MaryCandy Pack B2012.152.15
2021-12-07MaryBanana Ecuador1.472.543.73
2021-12-07MaryIce Cream 10Oz12.762.76
2021-12-07MarySoda Bbg 500Ml13.233.23
2021-12-08CharlesEgg Pack HpyHen1.430.751.07

Dans la colonne total ci-dessus, nous pouvons voir le résultat de la fonction ROUND(). Notez que toutes les valeurs de total ont deux chiffres décimaux. La valeur a été arrondie au centième le plus proche, ce qui signifie que la transformation de ROUND() n'est pas une simple troncature. Par exemple, 4.7498 a été arrondi à 4,75, ce qui est une valeur supérieure ; 3.7338 a été arrondi à 3.73, ce qui est une valeur inférieure.

En règle générale, les nombres comportant un 5 ou plus dans la décimale spécifiée sont arrondis vers le haut (4,7498 est arrondi à 4,75) et les nombres inférieurs à 5 sont arrondis vers le bas (3,7338 est arrondi à 3,73).

Utilisation de la fonction ROUND() avec un seul argument

La fonction ROUND() que nous avons utilisée dans l'exemple précédent avait deux arguments : la valeur à arrondir et la valeur precision (qui était 2). L'adresse precision indique le nombre de décimales que nous souhaitons voir apparaître dans le résultat. Toutefois, vous pouvez omettre le paramètre precision. Dans ce cas, ROUND() suppose une précision par défaut de 0 et renvoie des valeurs entières avec 0 décimale.

Prenons un exemple. Supposons que nous voulions obtenir le revenu total de notre marché groupé par vendeur. Cependant, nous voulons un rapport compact et simple, avec les valeurs de revenus sous forme d'entiers. Voici le code que nous utiliserions dans une base de données MySQL :

SELECT
  seller, 
  ROUND(SUM(total)) as total_revenue
FROM sales
GROUP BY seller

Nous pouvons voir les résultats ci-dessous.

sellertotal_revenue
Charles12
Mary38

Utilisation de la fonction SQL ROUND() dans différentes bases de données

Dans l'exemple suivant, nous voulons montrer le résultat de la fonction ROUND() sur certaines valeurs spécifiques, comme les valeurs se terminant par 0,5 ou 0,0. Pour cela, nous allons montrer une requête qui démontre le fonctionnement de l'arrondi :

SELECT 1.20 as Value, ROUND(1.20,1) AS "Round(value,1)" 
UNION
SELECT 1.22 as Value, ROUND(1.22,1) AS "Round(value,1)" 
UNION
SELECT 1.25 as Value, ROUND(1.25,1) AS "Round(value,1)" 
UNION
SELECT 1.27 as Value, ROUND(1.27,1) AS "Round(value,1)" 

Les requêtes précédentes utilisent uniquement des constantes (c'est-à-dire des valeurs explicitement définies) au lieu de données provenant d'une table. C'est pourquoi il n'y a pas de clause FROM dans la requête. Les résultats sont :

ValueRound(value,1)
1.201.2
1.221.2
1.251.3
1.271.3

En ce qui concerne les résultats de la fonction ROUND(), nous pouvons conclure que pour les valeurs comprises entre 1.20 et 1.249999, le résultat de ROUND() est 1.2, mais que pour les valeurs comprises entre 1.25 et 1.299999, le résultat est 1.3. Le point le plus important ici est peut-être que 1.25 est arrondi à 1.3.

La fonction ROUND() d'Oracle est similaire à la fonction ROUND() d'autres bases de données. Toutefois, pour le type de données BINARY_FLOAT, Oracle met en œuvre une variante de l'algorithme d'arrondi appelée round half to even (arrondir la moitié au pair). Cet algorithme arrondit les nombres dont la partie fractionnaire est égale à 0,5 au nombre entier pair le plus proche. Ainsi, ROUND(23.5) renvoie 24 et ROUND(24.5) renvoie également 24. Comme nous l'avons mentionné précédemment, ce comportement de la fonction ROUND() ne concerne que le type de données BINARY_FLOAT ; pour les autres types de données numériques, ROUND(24.5) renvoie 25. Nous pouvons le constater dans l'exemple de requête suivant exécuté dans Oracle.

SELECT	
  binary_float_value,
  ROUND(binary_float_value), 
  numeric_value,
  ROUND(numeric_value) 
FROM test_round_with_float;

Dans les résultats, nous pouvons voir la différence entre les deux types de données. ROUND(24.5) renvoie 24 lorsque le type de données de l'argument est BINARY_FLOAT ; il renvoie 25 lorsque le type de données est tout autre type de données numériques (comme NUMBER).

BINARY_FLOAT_VALUEROUND(BINARY_FLOAT_VALUE)NUMERIC_VALUEROUND(NUMERIC_VALUE)
23.52423.524
24.52424.525

Utilisation de SQL ROUND() avec une précision négative

ROUND() offre une fonctionnalité différente lorsque le paramètre de précision est un nombre négatif. Dans l'exemple ci-dessous, nous pouvons obtenir le multiple le plus proche de 100 en utilisant ROUND(value, -2). Nous allons utiliser une requête similaire à la précédente pour montrer cette fonctionnalité :

SELECT 12345 as Value, ROUND(12345,-2) AS "Round(value,-2)" 
UNION
SELECT 12355 as Value, ROUND(12355,-2) AS "Round(value,-2)" 
UNION
SELECT 12350 as Value, ROUND(12350,-2) AS "Round(value,-2)" 
UNION
SELECT 101 as Value, ROUND(101,-2) AS "Round(value,-2)" 
UNION
SELECT 199 as Value, ROUND(199,-2) AS "Round(value,-2)" 
UNION
SELECT 99 as Value, ROUND(99,-2) AS "Round(value,-2)" 

La requête actuelle est exécutée dans MS SQL Server. Comme pour la requête précédente, nous continuons à utiliser des données constantes pour montrer comment ROUND() fonctionne. Vous pouvez voir comment un paramètre precision de -2 fonctionne sur différentes valeurs. Le résultat de ROUND(value, -2) est le multiple le plus proche de 100 par rapport à value. Nous pouvons le voir dans le résultat de la requête ci-dessous :

ValueRound(value, -2)
1234512300
1235512400
1235012400
101100
199200
99100

Utilisation de ROUND() dans WHERE

Dans l'exemple suivant, nous allons montrer comment utiliser la fonction SQL ROUND() dans la clause WHERE d'une requête. Supposons que nous voulions un rapport montrant tous les articles dont la partie décimale du prix est inférieure à 50 cents. La condition suivante permettra d'identifier ces prix :

ROUND(unit_price) < unit_price

L'idée derrière la condition précédente est la suivante. Lorsque la partie décimale de la colonne unit_price est inférieure à 0,50, la fonction ROUND(unit_price) renvoie une valeur inférieure (si le prix est 3.23, ROUND(3.23) renvoie 3.00, qui est inférieur à 3,23). Alors la requête SQL entière est :

SELECT 
  distinct item, 
  unit_price,
  unit_price - ROUND(unit_price) AS decimal_part
FROM sales
WHERE ROUND(unit_price) < unit_price

Nous avons également ajouté un champ supplémentaire appelé decimal_part dans la liste SELECT pour montrer comment calculer la partie décimale d'un nombre à l'aide de la fonction ROUND(). La requête précédente a été exécutée dans une base de données PostgreSQL ; nous pouvons voir les résultats ci-dessous :

itemunit_pricedecimal_part
Candy Pack B202.150.15
Soda Bbg 500Ml3.230.23

Si vous souhaitez plus d'informations sur la fonction SUM(), je vous suggère de lire l'article La fonction SQL SUM() expliquée avec 5 exemples pratiques.

Utiliser les fonctions SQL pour renforcer vos requêtes

Dans cet article, nous avons expliqué la fonction ROUND() en SQL à l'aide d'exemples tirés de différentes bases de données. Quelle que soit la base de données que vous préférez, vous savez maintenant comment fonctionne ROUND() et comment vous pouvez l'utiliser dans vos requêtes et rapports.

Avant de terminer, j'ai une autre recommandation à vous faire. Notre aide-mémoire gratuit Fonctions SQL standards vous permet de trouver rapidement des détails sur les fonctions intégrées de SQL, les fonctions d'agrégation, etc. Je l'utilise presque tous les jours lorsque je travaille avec SQL. N'oubliez pas non plus notre site Fonctions SQL standardsoù vous pouvez apprendre et pratiquer les fonctions numériques, de texte et de date. Augmentez vos compétences, augmentez votre capital !