🎯 Quedan pocos días este mes Apoya SQLTest.online y ayúdanos a mantener la práctica de SQL gratuita para todos. Dona hoy →
Código SQL copiado al portapapeles

Funciones matemáticas básicas en SQL

Lección 3.3 · Tiempo de lectura: ~8 min · Tareas de práctica ↓

En esta lección conocerás las funciones matemáticas básicas de SQL, que permiten calcular y transformar datos numéricos directamente en las consultas. Veremos el redondeo, el módulo, las potencias, las raíces y la comparación de valores, con ejemplos prácticos de Sakila. Al terminar, podrás aplicar estas funciones con seguridad en tareas analíticas y prácticas.

Las funciones matemáticas de SQL sirven para hacer cálculos con datos numéricos. Permiten redondear valores, encontrar mínimos y máximos, calcular restos de divisiones y mucho más. Esta lección presenta las funciones matemáticas más usadas, con ejemplos basados en la base de datos Sakila.

Importante: los datos numéricos en SQL pueden tener distintos tipos (INTEGER, REAL/FLOAT, DECIMAL/NUMERIC). Una misma fórmula puede dar resultados distintos según el tipo de datos (por ejemplo, por la división entera, el redondeo y la precisión). Si no se tienen en cuenta los tipos, el resultado final puede no ser el esperado.

Funciones matemáticas básicas de SQL

Funciones matemáticas habituales

ABS(): devuelve el valor absoluto de un número.

Sintaxis:

ABS(number)

Ejemplo:

SELECT ABS(amount - 5) AS abs_difference
FROM payment
LIMIT 3;

Resultado: devuelve la diferencia absoluta entre amount y 5.

CEIL() / CEILING(): redondea un número hacia arriba (al entero más cercano).

Sintaxis:

CEIL(number)
CEILING(number)

Ejemplo:

SELECT CEIL(amount) AS rounded_up
FROM payment
LIMIT 3;

Resultado: redondea amount hacia arriba al entero más cercano.

FLOOR(): redondea un número hacia abajo (al entero más cercano).

Sintaxis:

FLOOR(number)

Ejemplo:

SELECT FLOOR(amount) AS rounded_down
FROM payment
LIMIT 3;

Resultado: redondea amount hacia abajo al entero más cercano.

ROUND(): redondea un número a la cantidad de decimales indicada.

Sintaxis:

ROUND(number, decimals)

Ejemplo:

SELECT ROUND(amount, 1) AS rounded_amount
FROM payment
LIMIT 3;

Resultado: redondea amount a un decimal.

POWER() / POW(): eleva un número a una potencia.

Sintaxis:

POWER(number, exponent)
POW(number, exponent)

Ejemplo:

SELECT POWER(amount, 2) AS squared_amount
FROM payment
LIMIT 3;

Resultado: eleva amount al cuadrado.

SQRT(): devuelve la raíz cuadrada de un número.

Sintaxis:

SQRT(number)

Ejemplo:

SELECT SQRT(amount) AS sqrt_amount
FROM payment
LIMIT 3;

Resultado: devuelve la raíz cuadrada de amount.

PI(): devuelve la constante matemática pi.

Sintaxis:

PI()

Ejemplo:

SELECT PI() AS pi_value;

Resultado: devuelve el valor de pi (aproximadamente 3.141592653589793).

MOD(): devuelve el resto de una división.

Sintaxis:

MOD(dividend, divisor)

Ejemplo:

SELECT MOD(payment_id, 5) AS mod_result
FROM payment
LIMIT 3;

Resultado: devuelve el resto de dividir payment_id entre 5.

Ejemplo de uso de una función en WHERE (buscar valores pares):

SELECT payment_id, amount
FROM payment
WHERE MOD(payment_id, 2) = 0
LIMIT 10;

Resultado: devuelve solo las filas con un payment_id par.

SIGN(): devuelve el signo de un número (-1, 0 o 1).

Sintaxis:

SIGN(number)

Ejemplo:

SELECT SIGN(amount - 5) AS sign_value
FROM payment
LIMIT 3;

Resultado: devuelve -1 si el valor es negativo, 0 si es cero y 1 si es positivo.

GREATEST(): devuelve el mayor de los valores indicados (MySQL, PostgreSQL).

Sintaxis:

GREATEST(value1, value2, ...)

Ejemplo:

SELECT GREATEST(amount, 5) AS max_value
FROM payment
LIMIT 3;

Resultado: devuelve el mayor de los dos valores: amount o 5.

Importante (NULL): el comportamiento de GREATEST() depende del SGBD.

  • En MySQL/MariaDB, si al menos un argumento es NULL, el resultado suele ser NULL.
  • En PostgreSQL, los argumentos NULL se ignoran, y solo se devuelve NULL si todos los argumentos son NULL.

LEAST(): devuelve el menor de los valores indicados (MySQL, PostgreSQL).

Sintaxis:

LEAST(value1, value2, ...)

Ejemplo:

SELECT LEAST(amount, 5) AS min_value
FROM payment
LIMIT 3;

Resultado: devuelve el menor de los dos valores: amount o 5.

Importante (NULL): LEAST() sigue las mismas diferencias entre SGBD con NULL que GREATEST().

Para que el comportamiento sea predecible en distintos SGBD, se suele usar COALESCE(), por ejemplo:

SELECT GREATEST(COALESCE(value1, 0), COALESCE(value2, 0));

RAND(): devuelve un número aleatorio entre 0 y 1.

Sintaxis:

RAND()

Ejemplo:

SELECT RAND() AS random_value
FROM payment
LIMIT 3;

Resultado: devuelve un número aleatorio entre 0 y 1.

Importante: no des por hecho que RAND() se recalcula siempre para cada fila en todos los contextos. Según el SGBD, el plan de ejecución, el uso de CTE o subconsultas y otros factores, el mismo valor aleatorio puede reutilizarse en varias filas.

Si necesitas sí o sí valores aleatorios distintos por fila, comprueba el comportamiento en tu SGBD y con la forma exacta de tu consulta.

Casos de uso prácticos

  1. Redondear importes de pago: Usa ROUND(amount, 0) para redondear los valores a números enteros.

  2. Encontrar registros por el resto de una división: Usa MOD(payment_id, 2) en WHERE (por ejemplo, MOD(payment_id, 2) = 0) para encontrar los identificadores de pago pares.

  3. Calcular raíces cuadradas: Usa SQRT(amount) para analizar la distribución de los pagos.

  4. Comparar valores: Usa GREATEST() y LEAST() para elegir el valor máximo o mínimo entre varios.

  5. Controlar los tipos de datos: Si la precisión importa, convierte explícitamente los valores al tipo necesario (por ejemplo, CAST(value AS DECIMAL(10,2))) para evitar sorpresas por la aritmética entera y el redondeo.

Preguntas frecuentes

¿Qué diferencia hay entre ROUND(), CEIL() y FLOOR()?

ROUND() redondea al valor más cercano (o al número de decimales indicado), CEIL() siempre redondea hacia arriba y FLOOR(), siempre hacia abajo.

¿Por qué fórmulas parecidas pueden dar resultados distintos?

La razón principal son los tipos de datos. Los tipos enteros y decimales tratan de forma diferente la división, el redondeo y la precisión.

¿Cuándo conviene usar MOD()?

MOD() es útil para comprobaciones periódicas, por ejemplo para repartir registros en grupos o filtrar identificadores pares o impares.

¿Por qué hay que tener en cuenta las diferencias entre SGBD en GREATEST() y LEAST()?

Porque el tratamiento de NULL puede variar entre MySQL/MariaDB y PostgreSQL. Para un comportamiento predecible, se suele usar COALESCE().

Preguntas de entrevista

¿Cómo eliges la función de redondeo adecuada para una regla de negocio?

Primero define la regla: redondeo estándar (ROUND), siempre hacia arriba (CEIL) o siempre hacia abajo (FLOOR). Después comprueba cómo afecta a las métricas finales del informe.

¿Qué riesgos tienen los cálculos sin conversión explícita de tipos?

Puedes obtener resultados inesperados por la división entera o por pérdida de precisión. En los cálculos críticos, las conversiones explícitas como CAST(... AS DECIMAL(...)) son más seguras.

¿Qué hace SIGN() y para qué sirve?

SIGN() devuelve -1, 0 o 1 según el signo del valor. Es útil para clasificar rápidamente desviaciones como negativas, nulas o positivas.

¿Por qué hay que usar RAND() con cuidado en consultas analíticas?

Según el SGBD y el plan de ejecución, puede que los valores aleatorios no se recalculen fila a fila como esperas. Comprueba siempre el comportamiento en tu motor.


Puntos clave de esta lección:

  • Las funciones matemáticas de SQL permiten hacer cálculos y transformaciones directamente en las consultas.
  • ROUND, CEIL y FLOOR resuelven tareas de redondeo distintas, y la elección correcta depende de las reglas de negocio.
  • MOD, POWER y SQRT son prácticas para el análisis y la comprobación de datos.
  • Los tipos de datos influyen mucho en la precisión y en el resultado final de los cálculos.
  • En las consultas para varios SGBD, ten en cuenta las diferencias en el tratamiento de NULL dentro de las funciones.

Intenta resolver las siguientes tareas para reforzar lo que aprendiste en esta lección.

  1. Calcular el Área de un Círculo
  2. Cálculo de Circunferencia
  3. Clientes con Números Pares
  4. Calcular la Longitud de la Hipotenusa