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()— redondeoCEIL()— redondeo hacia arribaFLOOR()— redondeo hacia abajoMOD()— resto de la divisiónPOWER()— potenciaSQRT()— 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.33333 → 4.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.
GO TO FULL VERSION