Contenido de esta guía
Qué hace ROUND
ROUND devuelve un número redondeado. Puedes indicar cuántas posiciones decimales quieres conservar. Es útil en precios calculados, medias, porcentajes e informes.
Redondear un resultado no cambia automáticamente el tipo de la columna ni convierte el número en texto. Tampoco modifica los valores guardados cuando se utiliza dentro de SELECT.
Sintaxis básica
ROUND(numero, decimales)ROUND(numero)Sin el segundo argumento, los motores suelen redondear al entero más cercano. Los tipos aceptados y las reglas para posiciones negativas pueden variar.
Ejemplo guiado
Calculamos un precio con un 21 % adicional y redondeamos el resultado a dos decimales:
SELECT nombre,
precio,
ROUND(precio * 1.21, 2) AS precio_con_iva
FROM productos
ORDER BY id
LIMIT 6;| nombre | precio | precio_con_iva |
|---|---|---|
| Ratón | 24.9 | 30.13 |
| Teclado | 49.5 | 59.89 |
| Monitor 24 | 179.0 | 216.59 |
| Portátil Pro | 999.0 | 1208.79 |
| Auriculares | 69.9 | 84.58 |
| Monitor 27 | 249.0 | 301.29 |
Orden de las operaciones
- SQL calcula
precio * 1.21. ROUNDrecibe ese resultado.- El segundo argumento conserva dos posiciones decimales.
- La columna original
preciono cambia.
Redondear no es formatear. El motor puede mostrar 30.1 en vez de 30.10 porque sigue siendo un número. Mostrar siempre dos cifras es una decisión de presentación o una conversión específica del motor.
Error frecuente
Redondear antes de terminar el cálculo
SUM(ROUND(precio_unitario * cantidad, 2))Redondear cada fila y después sumar puede producir un total distinto de sumar con toda la precisión y redondear al final. La regla correcta depende del problema contable, pero debe ser intencional.
Comprueba lo aprendido
Redondea el pedido medio por estado
Agrupa los pedidos por estado y devuelve la media de total redondeada a dos decimales con el alias media. Ordena por estado.
Solución razonada
SELECT estado,
ROUND(AVG(total), 2) AS media
FROM pedidos
GROUP BY estado
ORDER BY estado;AVG calcula una media por grupo y ROUND actúa sobre cada media. El resultado es 424.3 para cancelado, 202.08 para enviado y 140.05 para pendiente.
Redondea después de sumar las líneas
Reconstruye el total de cada pedido desde detalle_pedido. Multiplica cantidad * precio_unitario, suma por pedido_id y aplica ROUND(..., 2) al resultado de la suma. Ordena por pedido_id.
pedido_id.SUM, calcula cantidad * precio_unitario.ROUND(..., 2), no cada línea por separado.Solución razonada
SELECT pedido_id,
ROUND(SUM(cantidad * precio_unitario), 2) AS total_calculado
FROM detalle_pedido
GROUP BY pedido_id
ORDER BY pedido_id;Primero se acumulan las líneas con toda la precisión disponible y después se redondea cada total. Como controles rápidos, los pedidos 101, 106 y 115 producen 128.4, 1088.0 y 24.0, respectivamente.
Diferencias entre motores
SQLite, PostgreSQL y MySQL incluyen ROUND, pero los tipos numéricos, la precisión y el soporte de posiciones negativas no son idénticos. En cálculos financieros revisa también el tipo de la columna: un decimal exacto y un número de coma flotante no se comportan igual.
Qué debes recordar
- El segundo argumento indica los decimales.
- Redondear no es lo mismo que truncar.
- Redondear no garantiza un formato con ceros finales.
- En cálculos acumulados, decide en qué momento aplicar el redondeo.
Conceptos relacionados
Fuentes técnicas consultadas
Se utilizaron para comprobar argumentos, tipos y variantes.