Probé este ejemplo en Oracle 11.2 para mostrar porque sum(col1)+sum(col2) y sum(col1+col2) puedan producir resultados diferentes. Para empezar, creé una tabla y añadí unos datos:
SQL> create table empleado
2 (nombre varchar2(10),
3 sueldo number,
4 comision number)
5 /
Tabla creada.
SQL> insert into empleado values ('Andrew',10,5)
2 /
1 fila creada.
SQL> insert into empleado values ('Brian',10,null)
2 /
1 fila creada.
SQL> insert into empleado values ('Colin',null,5)
2 /
1 fila creada.
SQL>
Luego ejecuté dos comandos de SQL y vi que los resultados eran diferentes:
SQL> select sum(sueldo) + sum(comision) from empleado
2 /
SUM(SUELDO)+SUM(COMISION)
-------------------------
30
SQL> select sum(sueldo + comision) from empleado
2 /
SUM(SUELDO+COMISION)
--------------------
15
SQL>
Entonces miré los datos que había añadido:
SQL> select * from empleado
2 /
NOMBRE SUELDO COMISION
---------- ---------- ----------
Andrew 10 5
Brian 10
Colin 5
SQL>
Verifiqué sum(sueldo). Esta cifra cuenta los valores pero ignora los nulos:
SQL> select sum(sueldo) from empleado
2 /
SUM(SUELDO)
-----------
20
SQL>
La misma cosa pasa con sum(comision):
SQL> select sum(comision) from empleado
2 /
SUM(COMISION)
-------------
10
SQL>
SUM(COMISION)
-------------
10
SQL>
Pero si se suman sueldo y comisión en cada fila, el resultado es nulo si sueldo sea nulo. También es nulo si comisión sea nulo:
SQL> select nombre, (sueldo + comision) "Pago Total"
2 from empleado
3 /
NOMBRE Pago Total
---------- ----------
Andrew 15
Brian
Colin
SQL>
Esto es porque, si se añaden un número y un nulo, el resultado es un nulo:
SQL> l
1 select nvl(to_char(10+null),'10 + null es nulo')
2* from dual
SQL> /
NVL(TO_CHAR(10+NU
-----------------
10 + null es nulo
Por eso, los dos comandos producen resultados diferentes cuando la tabla contiene nulos.
Shared on Linkedin on 6th July 2018.
ResponderEliminar