Suma necesaria para la base de datos MySQL

Suma necesaria para la base de datos MySQL

Espero que me puedan ayudar con la siguiente consulta:
Tengo las siguientes 2 tablas:

tablaA

tabla

tablaA.monedaA siempre será igual a la monedaB en el elemento relacionado en la tablaB.
Necesito devolver los siguientes resultados:

ingrese la descripción de la imagen aquí

Básicamente, en los resultados necesito devolver todos los elementos de la tabla A + un resumen de las entradas de la tabla B. He estado intentando varias consultas, pero parece que no puedo encontrar oraciones para esto. Los que probé no devolvían los datos del elemento 4 (tenga en cuenta que el elemento 4 no tiene entradas en la tabla B).

Mostrar la mejor respuesta

¿Qué consultas has probado?

Lea y actúe en Cómo preguntar, la flecha de voto negativo sobre el texto y presione googlear 'tarea de intercambio de pila'. Muestra lo que intentaste. Lea y actúe en ejemplo mínimo reproducible. Por favor use texto, no imágenes/enlaces, para el texto (incluyendo código, tablas y ERD). Use una imagen solo por conveniencia para complementar el texto y/o para lo que no se puede dar en el texto.

Creo que algo como esto funcionaría bien:

select 
    tableA.idA, 
    tableA.currencyA as currency, 
    tableA.totalA as total, 
    case when (sum(tableB.amountB) is null) then 0 else sum(tableB.amountB) end as 'in',
    case when (sum(tableB.amountB) is null) then tableA.totalA else 
    tableA.totalA-sum(tableB.amountB) end as 'difference'
from 
    tableA left outer join tableB on tableA.idA=tableB.idA
group by tableA.idA;

Un pequeño enfoque claro de lo que necesita

SELECT z.*,
(z.totalA - z.in) AS difference
FROM (
    SELECT a.idA, a.currencyA, a.totalA,
    IF(b.idB IS NOT NULL, SUM(b.amountA), 0) AS `in`
    FROM tableA a
    LEFT JOIN tableB b ON a.idA = b.idA
    GROUP BY a.idA
) z;

Salida

idA currencyA   totalA  in  difference
1      usd       1000   550   450
2      usd       2000   700   1300
3      eur       3000   600   2400
4      usd       4000    0    4000

Demostración de trabajo

¡Gracias Samir! La consulta que publicaste funciona muy bien. ¿Sabes si hay alguna diferencia en términos de rendimiento entre tu consulta y la que he publicado a continuación? stackoverflow.com/a/49157229/1835537

En su consulta, calculará SUM y verificará la condición 'IF/ELSE' dos veces, lo cual no es un cuello de botella de rendimiento, pero se puede simplificar y optimizar un poco más con el que publiqué.