Cuando estoy realizando esta consulta, obtengo valores NULL. ¿Por qué?
Tengo una tabla llamada fact_trip
que tiene una columna llamada fare_final
y quiero encontrar la diferencia entre los valores.
SQL> desc fact_trip
Nombre ¿Nulo? Tipo
----------------------------------------- -------- ----------------------------
TRIP_UUID NOT NULL VARCHAR2(20)
DATESTR DATE
PRODUCT_TYPE_NAME VARCHAR2(20)
CITY_ID NUMBER
DRIVER_UUID VARCHAR2(50)
IS_COMPLETED VARCHAR2(10)
ETA NUMBER
ATA NUMBER
UFP_FARE NUMBER(4,2)
FARE_FINAL NUMBER(4,2)
Así que cuando hago esto, obtengo NULL como resultado:
SQL> select sum(fare_final) from fact_trip where to_char(datestr, 'W')=1 - (select sum(fare_final) from fact_trip where to_char(datestr, 'W')=2);
SUM(FARE_FINAL)
---------------
Incluso intenté hacer esas consultas select individualmente de esta manera:
SQL> select sum(fare_final) from fact_trip where to_char(datestr, 'W')=1;
SUM(FARE_FINAL)
---------------
1821.6
SQL> select sum(fare_final) from fact_trip where to_char(datestr, 'W')=2;
SUM(FARE_FINAL)
---------------
67
Lo cual, por supuesto, obtiene un resultado. Pero luego, cuando ejecuto esas consultas para obtener la diferencia entre ellas, muestra NULL. Como quiero la diferencia entre ellas (1821.6 - 67)
.
¿Alguien puede decirme qué está mal en eso?
¡Gracias!
davy.ai
Parece que el problema que causa la salida NULL puede ser debido a la resta de dos valores que pueden resultar en null si el segundo valor es mayor que el primer valor. Para evitar este problema, puedes usar una declaración case para comprobar los valores null y luego devolver un 0 para ese valor. Aquí tienes una consulta actualizada que debería funcionar:
Esta consulta comprobará si la suma de la segunda semana es null y, si lo es, simplemente devolverá la suma de la primera semana. Si no es null, entonces restará la suma de la segunda semana de la suma de la primera semana.