Pregunta 1¿Cuál de los siguientes es el resultado correcto de SELECT ROUND(3.84);?
Funciones ③ — Funciones matemáticas (ROUND / FLOOR / CEILING) y COALESCE
El tercero de tres artículos sobre funciones SQL. Cubre las funciones matemáticas ROUND / FLOOR / CEILING / POWER y COALESCE — que devuelve el primer valor no-NULL — usando conjuntos de datos staff y test-score cargados desde CSV.
Datos usados en este artículo — staff y test_score
El último artículo sobre funciones cubre las funciones matemáticas y COALESCE. Con las funciones matemáticas, manejaremos redondeo, suelo, techo y exponenciación en valores numéricos como la columna salary. Con COALESCE, cubriremos el reemplazo de NULL por otro valor.
Este artículo usa dos CSV. La primera mitad (funciones matemáticas) usa la misma tabla staff que antes (10 empleados). La segunda mitad (COALESCE) trae una nueva tabla test_score (8 estudiantes × 3 intentos de prueba, con NULL). En test_score, las columnas score_1 / score_2 / score_3 tienen NULL donde un estudiante estuvo ausente y no hizo esa prueba — perfecto para un escenario realista como «usar la nota de la primera prueba que el estudiante pudo hacer» para aprender cómo funciona COALESCE.
Funciones matemáticas — ROUND / FLOOR / CEILING / POWER
Aquí están las 4 funciones principales para dar forma a valores numéricos:
- ROUND(x, n): redondea a n decimales. Omite n y redondea a entero
- FLOOR(x): suelo (redondea hacia infinito negativo)
- CEILING(x) o CEIL(x): techo (redondea hacia infinito positivo)
- POWER(x, y): exponenciación (x elevado a y)
-- 1) ROUND: redondeo
SELECT ROUND(3.14); -- 3 (entero)
SELECT ROUND(3.14, 1); -- 3.1 (1 decimal)
-- 2) FLOOR: suelo
SELECT FLOOR(3.84); -- 3
-- Nota: CEILING funciona en MySQL / PostgreSQL / Oracle / SQL Server — SELECT CEILING(3.14); → 4
-- 3) POWER: exponenciación
SELECT POWER(3, 4); -- 81 (3 a la 4)
SELECT POWER(2, 10); -- 1024
-- 4) En columna — redondea el salario mensual
SELECT name, salary, ROUND(salary / 12.0) AS monthly
FROM staff;
| Entrada | ROUND (redondeo) | FLOOR (suelo) | CEILING (techo / no disponible en la consola de este curso) |
|---|---|---|---|
| 3.14 | 3 | 3 | 4 |
| 3.84 | 4 | 3 | 4 |
| 3.50 | 4 | 3 | 4 |
| -3.14 | -3 | -4 (hacia negativo) | -3 |
COALESCE — devuelve el primer valor no-NULL
`COALESCE(valor1, valor2, valor3, ...)` evalúa sus argumentos de izquierda a derecha y devuelve el primero que no sea NULL. Si todos son NULL, devuelve NULL. Úsala cuando quieras un respaldo para NULL: «usa la columna principal si tiene valor, si no la columna de respaldo, si no un valor por defecto».
Este artículo usa la tabla test_score. Para cada student_id, score_1 / score_2 / score_3 contienen las notas de las pruebas 1ª, 2ª y 3ª, con NULL donde el estudiante estuvo ausente. Pasar (score_1, score_2, score_3, 0) a COALESCE te da la nota de la primera prueba que el estudiante pudo hacer, tratada como «nota final». Añadir 0 al final significa «si faltó a las tres, tratarlo como 0».
-- 1) Verifica con valores literales
SELECT COALESCE(NULL, NULL, 'C'); -- 'C'
SELECT COALESCE(NULL, NULL, NULL); -- NULL
-- 2) Saca la nota final de la tabla test_score
SELECT student_id, name, score_1, score_2, score_3,
COALESCE(score_1, score_2, score_3) AS first_score
FROM test_score;
-- 3) Usa un valor por defecto — «ausente en todas = 0 puntos»
SELECT student_id, name,
COALESCE(score_1, score_2, score_3, 0) AS final_score
FROM test_score;
La versión de 2 argumentos se puede escribir como IFNULL
Para el caso más simple de 2 argumentos — «si es NULL, usa un valor por defecto; si no, el valor original» — también puedes escribir IFNULL(columna, default) (soportado tanto en la consola de este curso como en MySQL). COALESCE(email, 'no registrado') y IFNULL(email, 'no registrado') son exactamente lo mismo.
Cuando necesitas 3 o más argumentos, usa COALESCE. Como COALESCE es el estándar SQL, la misma forma funciona en PostgreSQL, Oracle, SQL Server, etc. — es la opción más portable.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Qué devuelve SELECT FLOOR(3.84), CEILING(3.14);?
Pregunta 3¿Qué devuelve SELECT COALESCE(NULL, NULL, 'C', 'D');?