Volver a la lista de artículos Artículos
Lectura de 8 minutos

Cómo utilizar la función ROUND() en SQL

¿Necesita redondear resultados numéricos en SQL? La función ROUND() está aquí para hacer el trabajo.

Las bases de datos relacionales modernas ofrecen muchas funciones incorporadas que amplían las capacidades de SQL. En este artículo, utilizaremos ejemplos prácticos para explicar cómo funciona la función ROUND(). (Alerta de spoiler: si has adivinado que redondea un número a una determinada cifra decimal, ¡estás en lo cierto! Sigue leyendo para saber más).

Funciones estándar de SQL

Cada base de datos SQL (PostgreSQL, MySQL, Oracle, SQL Server entre otras) tiene un conjunto de funciones incorporadas. Para entender lo que esto significa, hablemos de las funciones.

Una función es una pieza de código predefinida que transforma sus argumentos en un resultado. Por ejemplo, la función SUBSTRING() recibe una cadena de caracteres (es decir, una palabra, frase, etc.) como argumento y devuelve parte de esta cadena. Otras funciones como MAX() (que devuelve el valor más grande) y MIN() (que devuelve el valor más pequeño) procesan datos numéricos; puede obtener más información sobre estas funciones en el artículo ¿Qué son las funciones SQL MIN() y MAX()?

Se puede llamar a una función en una consulta SQL siempre que se necesite proporcionar un valor. Se puede llamar a una función en la lista de columnas SELECT, en la condición WHERE, o en cualquier otro lugar de la consulta donde se deba proporcionar un valor. Hay muchas funciones en SQL, y cada base de datos SQL proporciona un conjunto diferente de funciones.

Si busca un curso completo sobre las funciones en SQL, consulte nuestro curso interactivo sobre Funciones estándar de SQL. Abarca tanto las funciones básicas como las avanzadas de SQL, equipándote con todo lo que necesitas para empezar a utilizarlas para procesar datos numéricos, de texto y de otros tipos en las bases de datos de SQL.

¿Qué es la función SQL ROUND()?

La función ROUND en SQL se utiliza para redondear un número dado al entero más cercano o a un determinado decimal. Mostraremos varios ejemplos de consultas que utilizan la función ROUND(), pero primero presentaremos una tabla SQL de ejemplo llamada sales. Esta tabla registra los datos de ventas de un pequeño mercado. Algunos de los productos (como los huevos o las verduras) se venden en función del peso; en este caso, la columna quantity registra el número de kilos vendidos, que puede incluir dígitos decimales.

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

Empecemos por mostrar una consulta sencilla utilizando la función ROUND() en SQL estándar. Si observamos la columna total en la tabla sales tabla anterior, podemos ver algunos registros en los que el valor tiene 3 dígitos decimales. Supongamos que queremos un informe que muestre todas las ventas, pero sólo queremos un máximo de 2 dígitos decimales en la columna total. Esta es la consulta que utilizaríamos:

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

Podemos ver que la función ROUND() recibe dos parámetros. El primero es el valor numérico a redondear (es decir, la columna total ); el segundo se llama precision e indica el número de dígitos decimales que queremos mantener en el número redondeado. El resultado de esta consulta se muestra a continuación:

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

En la columna total de arriba, podemos ver el resultado de la función ROUND(). Observe que todos los valores de total tienen dos dígitos decimales. El valor fue redondeado a la centésima más cercana, lo que significa que la transformación de ROUND() no es un simple truncamiento. Por ejemplo, 4.7498 se redondeó a 4,75, que es un valor superior; 3.7338 se redondeó a 3.73, que es un valor inferior.

Como regla general, los números con un 5 o más en el lugar decimal especificado se redondean hacia arriba (4.7498 se redondea a 4.75) y los números menores de 5 se redondean hacia abajo (3.7338 se redondea a 3.73).

Uso de la función ROUND() con un argumento

La función ROUND() que utilizamos en el ejemplo anterior tenía dos argumentos: el valor a redondear y el precision (que era 2). El precision indica el número de decimales que queremos en el resultado. Sin embargo, puedes omitir el parámetro precision, en cuyo caso ROUND() asume una precisión por defecto de 0 y devuelve valores enteros con 0 decimales.

Veamos un ejemplo. Supongamos que queremos obtener los ingresos totales de nuestro mercado agrupados por vendedor. Sin embargo, queremos un informe compacto y sencillo, con los valores de los ingresos como enteros. Este es el código que utilizaríamos en una base de datos MySQL:

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

Podemos ver los resultados a continuación.

sellertotal_revenue
Charles12
Mary38

Uso de la función SQL ROUND() en diferentes bases de datos

En el siguiente ejemplo, queremos mostrar el resultado de la función ROUND() en algunos valores específicos, como los valores que terminan en 0.5 o 0.0. Para ello, mostraremos una consulta que demuestre cómo funciona el redondeo:

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)" 

Las consultas anteriores sólo utilizan constantes (es decir, valores definidos explícitamente) en lugar de datos de una tabla. Por eso no hay ninguna cláusula FROM en la consulta. Los resultados son:

ValueRound(value,1)
1.201.2
1.221.2
1.251.3
1.271.3

En cuanto a los resultados de la función ROUND(), podemos concluir que para los valores del rango 1.20 a 1.249999, el resultado de ROUND() es 1.2, sin embargo para los valores del rango 1.25 a 1.299999 el resultado es 1.3. Quizás el punto más importante aquí es que 1.25 se redondea a 1.3.

La función ROUND() en Oracle es similar a la función ROUND() en otras bases de datos. Sin embargo, para el tipo de datos BINARY_FLOAT, Oracle implementa una variación en el algoritmo de redondeo llamada redondear la mitad a par. Esto redondea los números con una parte fraccionaria de 0,5 al entero par más cercano. Así, ROUND(23.5) devuelve 24 y ROUND(24.5) devuelve también 24. Como hemos mencionado anteriormente, este comportamiento de la función ROUND() es sólo para el tipo de datos BINARY_FLOAT; para otros tipos de datos numéricos, ROUND(24.5) devuelve 25. Podemos ver esto en el siguiente ejemplo de consulta ejecutada en Oracle.

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

En los resultados, podemos ver la diferencia entre los dos tipos de datos. ROUND(24.5) devuelve 24 cuando el tipo de datos del argumento es BINARY_FLOAT; devuelve 25 cuando el tipo de datos es cualquier otro tipo de datos numérico (como NUMBER).

BINARY_FLOAT_VALUEROUND(BINARY_FLOAT_VALUE)NUMERIC_VALUEROUND(NUMERIC_VALUE)
23.52423.524
24.52424.525

El uso de SQL ROUND() con precisión negativa

ROUND() ofrece una funcionalidad diferente cuando el parámetro de precisión es un número negativo. En el siguiente ejemplo, podemos obtener el múltiplo más cercano de 100 utilizando ROUND(value, -2). Utilizaremos una consulta similar a la anterior para mostrar esta funcionalidad:

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 consulta actual se ejecuta en MS SQL Server. Al igual que la consulta anterior, seguimos utilizando datos constantes para mostrar cómo funciona ROUND(). Se puede ver cómo funciona un parámetro precision de -2 en diferentes valores. El resultado de ROUND(value, -2) es el múltiplo de 100 más cercano a value. Podemos ver en el resultado de la consulta de abajo:

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

Uso de ROUND() en WHERE

En el siguiente ejemplo, mostraremos cómo utilizar la función SQL ROUND() en la cláusula WHERE de una consulta. Supongamos que queremos un informe que muestre todos los artículos que tienen un precio con la parte decimal inferior a 50 céntimos. La siguiente condición identificará esos precios:

ROUND(unit_price) < unit_price

La idea detrás de la condición anterior es la siguiente. Cuando la parte decimal de la columna unit_price es inferior a 0,50, la función ROUND(unit_price) devolverá un valor inferior ( si el precio es 3.23 entonces, ROUND(3.23) devuelve 3.00, que es inferior a 3,23). Entonces la consulta SQL completa es:

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

También añadimos un campo extra llamado decimal_part en la lista SELECT para mostrar cómo calcular la parte decimal de un número utilizando la función ROUND(). La consulta anterior se ejecutó en una base de datos PostgreSQL; podemos ver los resultados a continuación:

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

Si quieres más información sobre la función SUM(), te sugiero que leas el artículo Explicación de la función SQL SUM() con 5 ejemplos prácticos.

Utilice las funciones SQL para potenciar sus consultas

En este artículo, hemos explicado la función ROUND() en SQL utilizando ejemplos de diferentes bases de datos. Independientemente de la base de datos que prefieras, ahora sabes cómo funciona ROUND() y cómo puedes utilizarla en tus consultas e informes.

Antes de terminar, tengo otra recomendación para usted. Nuestra hoja de trucos gratuita Funciones estándar de SQL te permite encontrar rápidamente detalles sobre las funciones incorporadas de SQL, las funciones agregadas y mucho más. Yo la utilizo casi todos los días cuando trabajo con SQL. Y no te olvides de nuestro Funciones estándar de SQL donde puedes aprender y practicar funciones numéricas, de texto y de fecha. ¡Aumenta tus habilidades, aumenta tus activos!