Volver a la lista de artículos Artículos
Lectura de 6 minutos

Funcionamiento del operador de división en SQL

El operador de división en SQL se utiliza para dividir una expresión o un número por otro. Este artículo te enseñará exactamente cómo utilizarlo y los errores comunes que debes evitar en el camino.

El operador de división en SQL se considera un operador aritmético. Los operadores aritméticos son suma (+), resta (-), multiplicación (*), división (/) y el módulo (%). Este artículo se centrará en el operador de división, y en las reglas que deben seguirse y algunos errores comunes a los que hay que prestar atención cuando se intenta dividir en SQL.

La sintaxis del operador de división en SQL es la siguiente:

SELECT <expression> / <expression>
FROM table
[WHERE expression]

Ten en cuenta que la inclusión de la cláusula WHERE es totalmente opcional. El operador de división se puede utilizar en cualquier lugar donde haya una expresión. Esto significa que puedes usar el operador de división en SQL con:

  • SELECT.
  • WHERE.
  • HAVING.
  • ORDER BY.
  • O como parte de una función.

Si estas expresiones te confunden un poco, considera echar un vistazo a este Ejercicio de SQL de LearnSQL.com. Es un método eficaz y divertido para afinar tus conocimientos de SQL.

El ejemplo más simple del operador de división es:

SELECT 10 / 2

Puedes ejecutar esta consulta y ver el resultado (en este caso, 5). Sin embargo, es más probable que trabajes con enteros que residen en columnas como parte de las tablas de tu base de datos.

Veamos un ejemplo de este tipo. Utilizaremos una tabla llamada stock, que contiene los alimentos típicos junto con su precio y cantidad.

stock

itempreciocantidad
Huevos1512
Leche34
Harina52
Pan103

Apliquemos el operador de división a una columna completa de nuestra tabla y veamos su efecto. Consideremos la siguiente consulta SQL:

SELECT cantidad, cantidad / 2 AS 'resultado'
FROM stock_level

Con esta consulta, estamos seleccionando la columna cantidad y luego mostrando el resultado de dividir el valor de cantidad en nuestra columna resultado que contiene el resultado de cantidad / 2. Ejecutemos esta consulta y observemos los resultados:

cantidadresultado
126
42
21
31

Los resultados son los esperados, excepto la última fila. ¿Acaso no es 3 / 2 = 1,5? El resultado mostrado por SQL Server muestra un valor de 1. Dependiendo de la variante de SQL que estés utilizando, el operador de división puede manejar la división de enteros de forma diferente. ¡Vamos a aclarar esto en la siguiente sección!

¿Cómo se dividen los enteros en SQL?

Las divisiones de enteros pueden comportarse de manera diferente dependiendo de su elección del sistema de gestión de bases de datos SQL. Los usuarios de MySQL y Oracle pueden esperar que el número real se muestre con un tipo de datos flotante, por ejemplo, 3 / 2 = 1.5.

Sin embargo, para los usuarios de SQL Server y PostgreSQL, la división de enteros es más compleja. Tendrán que recordar ciertas reglas cuando dividan números por un número no entero. Traigamos de nuevo el ejemplo anterior:

SELECT 3 / 2;

Al ejecutar esto en SQL Server o PostgreSQL, el resultado de esta consulta es 1, cuando la mayoría de los usuarios esperarían 1,5. ¿Qué ocurre aquí? El operador de división sólo maneja la parte entera del resultado al dividir dos enteros. El resultado obtenido se llama cociente. El resto no se trata. Con la división de dos enteros, el resultado será cuántas veces entrará un número en otro, de forma uniforme.

Considerea estos ejemplos en SQL Server o PostgreSQL:

Consulta de divisiónResultado
SELECT 10 / 33
SELECT 5 / 22
SELECT 11 / 61

Cambiar los operandos por número decimal o de punto flotante

Esto sólo puede hacerse si la operación de división particular lo permite. Si hay dos nombres de columna involucrados, este método no será posible; en su lugar, utiliza el método CAST/CONVERT descrito a continuación. Es necesario poder acceder a uno de los números directamente. El uso de este método es sencillo; simplemente cambiamos uno o ambos operandos:

Consulta de divisiónResultado
SELECT 10.0 / 33.333333
SELECT 5 / 2.02.5
SELECT 11.0 / 6.01.833333

También podemos aplicar este método a nuestro ejemplo de stock. Tenemos que actualizar nuestra consulta a lo siguiente:

SELECT cantidad, cantidad / 2.0 AS 'resultado'
FROM stock_level

La ejecución de esta consulta produce un conjunto de resultados similar al anterior con una diferencia clave.

cantidadresultado
126.00000
42.00000
21.00000
31.50000

Esto resulta ideal si podemos acceder a uno de los operandos y modificarlo directamente. Sin embargo, este no es siempre el caso.

Uso de CAST o CONVERT en columnas

Imaginemos que dividimos el valor de la columna precio por la columna cantidad para un item concreto. Nuestra consulta tendría el siguiente aspecto:

SELECT precio / cantidad
FROM stock
WHERE item = 'Harina'

La ejecución de esta consulta muestra un resultado de 2; este es un escenario clásico de división de enteros. Vamos a evitar esto utilizando CAST en una de nuestras columnas.

Tenemos que actualizar nuestra consulta a lo siguiente:

SELECT CAST(precio AS DECIMAL(7,2)) / cantidad AS 'CAST(precio)/cantidad'
FROM stock
WHERE item = 'Harina'

Ten en cuenta que también podrías utilizar CONVERT en lugar de CAST. Puedes leer más sobre la conversión de un entero utilizando CAST y CONVERT aquí. La ejecución de esta consulta muestra un nuevo resultado:

CAST(precio)/cantidad
2.50000

¡Ahí lo tenemos! La operación CAST se ha aplicado con éxito a la columna precio, convirtiéndola en un tipo de dato decimal para esta operación aritmética. Ten en cuenta que si la expresión aritmética contiene más de un operador, los operadores de multiplicación y división se evalúan primero, seguidos de los operadores de suma y resta. Cuando dos operadores tienen la misma prioridad, la expresión se evalúa de izquierda a derecha.

También debes tener en cuenta el error de "división por cero" de SQL, independientemente del SGBD que utilice. Dividir por cero da como resultado el infinito, algo que SQL no permite. Si lo hace, aparecerá un mensaje de error. Esta útil página del libro de cocina de SQL te muestra cómo manejar el error de "división por cero" en SQL. Compruébalo si es de tu interés.

¡Divide y vencerás con el operador de división de SQL!

En este artículo, nos sumergimos en lo más profundo, mostrando las complejidades del uso del operador de división en SQL para la división de enteros. Aprendimos cómo manejar la división de enteros para cada SGBD SQL desde SQL Server hasta MySQL. También hemos tocado el molesto error de "división por cero" de SQL e introducido recursos que te permitirán manejar este error particular con elegancia.

Como con cualquier otra cosa en la vida, ¡la práctica hace la perfección! Si quieres fortalecer tus habilidades SQL a través de divertidos desafíos mensuales, considera el Desafío SQL de este mes.