División de enteros frente a división decimal
Evite resultados inesperados mediante conversiones de tipo
División de enteros frente a división decimal es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Un resultado sorprendente
Empecemos con un acertijo. ¿Qué cree que devuelve la siguiente consulta?
Si espera 0.5, puede que le sorprenda. En muchas bases de datos SQL, dividir dos enteros produce un resultado entero: la parte decimal se elimina por completo.
SELECT 1 / 2 AS result;Explicación de la división entera
Cuando ambos operandos de una división son enteros, SQL realiza una división entera. El resultado se trunca hacia cero: no se redondea, sino que se conserva únicamente la parte entera.
Por tanto, 1 / 2 = 0, 7 / 3 = 2 y 9 / 4 = 2. La parte fraccionaria se descarta silenciosamente.
SELECT 7 / 3 AS truncated_result;Más ejemplos de división entera
Aquí tiene varios ejemplos de división entera en una sola consulta. Observe que todos los resultados pierden su parte decimal. Este comportamiento es coherente en las expresiones que solo contienen literales enteros o columnas enteras.
SELECT
10 / 4 AS ten_div_four,
9 / 2 AS nine_div_two,
1 / 3 AS one_div_three,
6 / 6 AS six_div_six;Solucionarlo con CAST
La forma más fiable de forzar una división decimal es convertir al menos un operando a un tipo decimal. CAST(value AS DECIMAL) o CAST(value AS NUMERIC) indica a SQL que trate el número como un valor de punto flotante, por lo que la división devuelve un resultado preciso.
SELECT CAST(1 AS DECIMAL) / 2 AS result;Aplicar CAST a ambos lados
Solo necesita convertir un lado de la división para obtener un resultado decimal: SQL promocionará automáticamente el otro operando. Sin embargo, convertir ambos lados hace explícita la intención y evita confusiones cuando alguien lea el código más adelante.
SELECT
CAST(7 AS DECIMAL) / CAST(3 AS DECIMAL) AS both_cast,
CAST(7 AS DECIMAL) / 3 AS one_cast;Usar un literal decimal
Otro truco rápido consiste en escribir uno de los operandos como un literal decimal añadiendo .0. SQL interpreta 1.0 como un número decimal, lo que fuerza la aritmética decimal en toda la expresión.
Esto resulta práctico para consultas rápidas y puntuales, aunque CAST es más claro en el código de producción.
SELECT 1.0 / 2 AS decimal_result,
7.0 / 3 AS another_result;Trampa del mundo real: datos de columnas
El problema se vuelve realmente importante al trabajar con columnas enteras. Imagine una tabla que registra objetivos de ventas. Dividir columnas enteras produce resultados enteros: ¡una tasa de conversión de 0 cuando debería ser 0.75!
CREATE TABLE sales_targets (
rep TEXT,
achieved INT,
target INT
);
INSERT INTO sales_targets VALUES
('Alice', 75, 100),
('Bob', 3, 4),
('Carol', 9, 10);
SELECT rep,
achieved / target AS wrong_rate
FROM sales_targets;Cómo corregir la división de columnas
Aplique CAST a la columna del numerador y la división devolverá ahora la tasa de conversión real como decimal. El denominador se convierte automáticamente.
Multiplicar después por 100.0 produce un porcentaje, sin dejar de usar aritmética decimal.
SELECT rep,
CAST(achieved AS DECIMAL) / target AS conversion_rate,
CAST(achieved AS DECIMAL) / target * 100.0 AS pct
FROM sales_targets;Controlar la precisión decimal
Puede controlar cuántos decimales se almacenan especificando la precisión y la escala en la conversión: DECIMAL(10, 2) significa hasta 10 dígitos en total, 2 de ellos después del punto decimal. Esto resulta útil cuando desea un resultado ordenado y redondeado en lugar de muchos dígitos finales.
SELECT CAST(CAST(1 AS DECIMAL(10,4)) / 3 AS DECIMAL(10,2)) AS rounded_result;ROUND después de dividir
A veces, desea realizar los cálculos internamente con toda la precisión y después redondear el valor final que se muestra. La función ROUND recibe el valor y el número de decimales que desea conservar.
Divida siempre primero (usando aritmética decimal) y redondee después; nunca redondee antes de dividir.
SELECT
ROUND(CAST(1 AS DECIMAL) / 3, 4) AS four_places,
ROUND(CAST(1 AS DECIMAL) / 3, 2) AS two_places,
ROUND(CAST(1 AS DECIMAL) / 3, 0) AS zero_places;La división entera puede ser útil
La división entera no siempre es un error; a veces es exactamente lo que necesita. Por ejemplo, convertir un número total de minutos en horas completas requiere usar intencionadamente la división entera. La clave es elegir deliberadamente entre la división entera y la decimal, en lugar de obtener una u otra por accidente.
SELECT
137 / 60 AS full_hours,
137 % 60 AS remaining_minutes;Comprobación rápida
Compruebe cuánto comprende la división entera y decimal en SQL.
Resumen de la lección
En esta lección ha aprendido cómo gestiona SQL la división entre enteros:
- Integer / Integer trunca el resultado: la parte decimal se pierde silenciosamente.
- Use
CAST(value AS DECIMAL)en al menos uno de los operandos para forzar la división decimal. - Escribir un literal decimal como
1.0también convierte la expresión en aritmética decimal. - Use
ROUNDdespués de dividir para controlar el número de decimales que se muestran. - La división entera a veces es intencionada (por ejemplo, al convertir minutos en horas), pero conviértala siempre en una elección consciente y no en un accidente.
Tenga cuidado con esta trampa siempre que divida columnas enteras: es una de las fuentes más habituales de errores silenciosos y difíciles de detectar en las consultas SQL.
Preguntas frecuentes
¿La lección «División de enteros frente a división decimal» es gratis?
Sí — el texto completo de «División de enteros frente a división decimal» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «División de enteros frente a división decimal»?
Evite resultados inesperados mediante conversiones de tipo Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «División de enteros frente a división decimal»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Aritmética y operadores
- Redondeo y truncamiento
- División de enteros frente a división decimal
- Funciones matemáticas útiles