0Pricing
SQL Academy · Lección

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.0 también convierte la expresión en aritmética decimal.
  • Use ROUND despué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

  1. Aritmética y operadores
  2. Redondeo y truncamiento
  3. División de enteros frente a división decimal
  4. Funciones matemáticas útiles
← Volver a SQL Academy