1

Me ocupa lo siguiente Tengo la siguiente sentencia SQL

SELECT users.*, SUM(billetera.monto) AS Monto_a_favor FROM users INNER JOIN billetera ON billetera.id_usuario=users.id GROUP BY ID

Esto me da como resultado todos los usuarios que esten en la tabla users que en algun momento hayan tenido saldo en la tabla billetera, pero me gustaria que el resultado fuera el siguiente:

Mostrar todos los datos de la tabla users pero que en la columna Monto_a_favor los que tangan saldo 0 o saldo negativo tambien aparezcan, intente con el siguiente codigo pero no logro dar con la solucion

SELECT users.*, 
SUM(CASE WHEN (SUM(billetera.monto) AS Monto_a_favor
FROM users
INNER JOIN billetera ON billetera.id_usuario=users.id GROUP BY ID)  > 0 THEN monto ELSE 0 END) AS 'Monto_a_favor',
FROM users
Jose M Herrera V
  • 1,026
  • 8
  • 22

1 Answers1

3

Tu consulta original esta bien, solo le falta arreglar la parte del join.

Como bien se explica aca, cada tipo de join hace una cosa diferente...

Como en tu caso vos queres todo lo que esta a la izquierda, sin importar si esta o no a la derecha, entonces tenes que cambiar un inner join (que solo trae lo que esta en los dos lados), por un left join (que trae todo lo de la izquierda, y solo lo relacionado de la derecha)

SELECT 
    users.*, 
    SUM(billetera.monto) AS Monto_a_favor 
FROM 
    users 
LEFT JOIN 
    billetera ON billetera.id_usuario=users.id 
GROUP BY ID
gbianchi
  • 19,675
  • 11
  • 38
  • 58