CodeGym /Cursos /SQL SELF /Funciones numéricas en SQL: redondeo, resto, potencia y r...

Funciones numéricas en SQL: redondeo, resto, potencia y raíz

SQL SELF
Nivel 8 , Lección 3
Disponible

SQL no es solo sobre texto y tablas. En bases de datos reales muchas veces tienes que trabajar con precios, cantidades, puntos, porcentajes, coordenadas, o sea, con números. Imagina:

  • Estás calculando descuentos y quieres redondear la suma al entero más cercano.
  • Quieres mostrar datos de estudiantes pares/impares.
  • Estás haciendo análisis de notas y quieres saber la raíz cuadrada de la varianza.
  • O construyes fórmulas para calcular puntos usando potencias.

SQL puede con todo esto sin ayuda de otros lenguajes de programación — puedes hacerlo directamente en las consultas usando las funciones matemáticas integradas. Hoy vamos a ver seis de las más útiles:

  • ROUND() — redondeo
  • CEIL() — redondeo hacia arriba
  • FLOOR() — redondeo hacia abajo
  • MOD() — resto de la división
  • POWER() — potencia
  • SQRT() — raíz cuadrada

* Redondeo de números: ROUND(), CEIL(), FLOOR()*

Muchas veces, al trabajar con números decimales (por ejemplo, 4.67891), necesitas redondear el resultado. Por ejemplo, si calculas la nota media, el precio final de un pedido, el porcentaje de descuento, etc., — los decimales de más no solo "afean" el resultado, sino que pueden confundir.

ROUND() — redondeo según las reglas matemáticas

ROUND(number [, digits])
  • number — el número que quieres redondear.
  • digits (opcional) — cuántos decimales dejar.

Ejemplos:

SELECT ROUND(4.67);       -- 5
SELECT ROUND(4.6789, 2);  -- 4.68

ROUND() funciona igual que el redondeo matemático de toda la vida: 4.5 → 5, 4.49 → 4.

Muy útil si trabajas con dinero o puntos que quieres mostrar bonito: 4.333334.33.

CEIL() — redondeo hacia arriba al entero más cercano

SELECT CEIL(4.1);  -- 5
  • Si el número ya es entero, el resultado no cambia.
  • Siempre devuelve un entero, no menor que el original.

Útil, por ejemplo, si necesitas saber cuántas páginas mostrar para productos: 21 productos a 10 por página → necesitas 3 páginas.

FLOOR() — redondeo hacia abajo

SELECT FLOOR(4.9);  -- 4
  • Devuelve el entero no mayor que el original.

Se usa cuando quieres saber en qué "piso" o "escalón" está el valor.

Comparación:

Valor ROUND() CEIL() FLOOR()
4.4 4 5 4
4.6 5 5 4
-4.6 -5 -4 -5

* Resto de la división: MOD()*

¿Para qué sirve el resto? Por ejemplo:

  • Comprobar si un número es par.
  • Dividir filas en grupos según un patrón (por ejemplo, repartir en 3 equipos).
  • Hacer un ciclo repetitivo (por ejemplo, "cada quinto registro").

Sintaxis:

MOD(dividend, divisor)

Ejemplos:

SELECT MOD(17, 5);  -- 2  (3*5 +2)
SELECT MOD(10, 3);  -- 1  (3*3 +1)

Ojo: el signo del resto depende del signo del primer argumento (dividend).

Aplicación:

SELECT student_id,
       CASE WHEN MOD(student_id, 2) = 0 THEN 'Par' ELSE 'Impar' END AS parity
FROM students;

* Potencias: POWER()*

A veces necesitas algo más que multiplicar, necesitas usar fórmulas matemáticas:

  • Cálculo de intereses: base * POWER(1 + rate, years)
  • Área de un círculo: π * r^2
  • Peso de fórmulas en machine learning

Sintaxis:

POWER(base, exponent)

Ejemplos:

SELECT POWER(2, 3);   -- 8
SELECT POWER(5, 2);   -- 25
SELECT POWER(9, 0.5); -- 3 (raíz cuadrada)

La función acepta cualquier número: enteros, decimales, negativos.

Raíz cuadrada: SQRT()

Si necesitas calcular la raíz, sobre todo en estadística (por ejemplo, desviación estándar), SQRT() te va a venir genial.

SELECT SQRT(25);    -- 5
SELECT SQRT(2);     -- ~1.4142

Si le pasas un número negativo — te dará error. Si eso puede pasar en tus datos, usa ABS():

SELECT SQRT(ABS(-25));  -- 5

Escenarios prácticos

Escenario 1: redondear el total de un pedido

SELECT order_id, ROUND(total_price, 0) AS total_rounded
FROM orders;

Escenario 2: calcular cuántas páginas mostrar

SELECT CEIL(COUNT(*) / 10.0) AS pages_needed
FROM products;

Escenario 3: repartir estudiantes en 3 grupos

SELECT student_id,
       MOD(student_id, 3) AS group_number
FROM students;

Escenario 4: raíz del promedio cuadrático

SELECT SQRT(AVG(POWER(score, 2))) AS root_mean_square
FROM grades;

Errores típicos y consejos

ROUND() puede aceptar un segundo argumento — no lo olvides si necesitas redondear a las centésimas.

MOD() con números negativos puede dar resultados inesperados.

POWER() y SQRT() funcionan con decimales — usa CAST() si hace falta.

Asegúrate de que en SQRT() no entre un número negativo, si no, tendrás un error de ejecución.

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