С этой таблицей в качестве источника
CREATE TABLE tableA
(`groupX` varchar(1), `groupY` varchar(1), `quantity` int)
;
INSERT INTO tableA
(`groupX`, `groupY`, `quantity`)
VALUES
('A', 'B', 10),
('A', 'C', 2),
('C', 'D', 7),
('B', 'A', 13),
('C', 'B', 1),
('D', 'B', 9)
;
Вы получите с этим утверждением
SELECT T1.groupX groupname, (sum1 - sum2) as res
From
(SELECT groupX ,Sum(quantity) sum1 From tableA Group by groupX) T1
inner join (SELECT groupY,Sum(quantity) sum2 From tableA Group by groupY) T2
On T1.groupX = T2.groupY
ORDER by res;
Вы получите
groupname res
B -7
A -1
D 2
C 6
Поскольку я не знаю всехваши данные, может быть, лучше использовать левое соединение, которое будет включать все уникальные члены группы X, у которых нет соответствующей группы в группе Y. С правым соединением это наоборот
Смотрите пример здесь https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=6c2facaaf6564d4025f24f6aab35adf7