Все валюты есть в обоих таблицах? Или какой-то из валют где-то может не быть?
Если в ПРИХОДАХ есть все виды валют, то можно так:
SELECT
p.валюта as ВАЛЮТА,
p.tot as ПРИХОДОБЩИЙ,
r.tot as РАСХОДОБЩИЙ,
(p.tot - r.tot) as ОСТАТОК
FROM
( SELECT SUM(приход) as tot, валюта FROM ПРИХОДЫ GROUP BY валюта ) as p
LEFT JOIN
( SELECT SUM(расход) as tot, валюта FROM РАСХОДЫ GROUP BY валюта ) as r
ON r.валюта = p.валюта
Если в "ПРИХОДАХ" может не быть каких-то валют,то нужен FULL JOIN, вместо LEFT.
MySQL его сама не умеет, но способов его реализовать несколько, например:
UNION LEFT и RIGHT JOIN-ов - самый короткий/понятный/красивый вариант, но при большом количестве валют может начать тормозить, так как UNION делает сортировку.
SELECT
p.валюта as ВАЛЮТА,
p.tot as ПРИХОДОБЩИЙ,
r.tot as РАСХОДОБЩИЙ,
(p.tot - r.tot) as ОСТАТОК
FROM
( SELECT SUM(приход) as tot, валюта FROM ПРИХОДЫ GROUP BY валюта ) as p
LEFT JOIN
( SELECT SUM(расход) as tot, валюта FROM РАСХОДЫ GROUP BY валюта ) as r
ON r.валюта = p.валюта
UNION
SELECT
p.валюта as ВАЛЮТА,
p.tot as ПРИХОДОБЩИЙ,
r.tot as РАСХОДОБЩИЙ,
(p.tot - r.tot) as ОСТАТОК
FROM
( SELECT SUM(приход) as tot, валюта FROM ПРИХОДЫ GROUP BY валюта ) as p
RIGHT JOIN
( SELECT SUM(расход) as tot, валюта FROM РАСХОДЫ GROUP BY валюта ) as r
ON r.валюта = p.валюта
Если производительность в данном месте требует оптимизации (советую сильно подумать, прежде, чем отвечать "да"), то можно усложнять запрос, делая его быстрее.
Например, заменить UNION на UNION ALL и во второй части не выбирать значения, которые есть в первой.