Простое объединение в столбце BG с группировкой в том же виде покажет результаты, которые вы ищете
СОЗДАТЬ ПРИМЕРНЫЕ СТОЛЫ
create table `donor` (
`did` int(10) ,
`name` varchar(30),
`gender` varchar(1),
`city` varchar(30),
`bg` varchar(4),
`amount` int(10)
);
create table `acceptor` (
`did` int(10),
`name` varchar(30),
`gender` varchar(1),
`city` varchar(30),
`bg` varchar(4),
`amount` int(10)
);
ДОБАВИТЬ ПРИМЕРНЫЕ ДАННЫЕ
insert into `donor`
(`name`,`gender`,`city`,`bg`,`amount`)
VALUES
('MARIA','F','Warne,NH','AB+',7),
('RUBY','F','East Natchitoche, PA','AB+',3),
('CHARLES','M','East Natchitoche, PA','A-',6),
('DOROTHY','F','East Natchitoche, PA','AB+',9),
('MICHAEL','M','Warne,NH','A+',1);
insert into `acceptor`
(`name`,`gender`,`city`,`bg`,`amount`)
VALUES
('LINDA','F','Warne,NH','A+',9),
('CHARLES','M','Warne,NH','AB+',8),
('RICHARD','M','East Natchitoche, PA','AB+',3),
('LINDA','F','East Natchitoche, PA','A+',1),
('PATRICIA','F','Warne,NH','A+',5);
ПРИМЕР ЗАПРОСА:
select
a.`bg`,
sum(a.`amount`) as `num donor units`,
sum(b.`amount`) as `num acceptor units`
from `donor` a
join `acceptor` b
on a.`bg` = b.`bg`
GROUP BY a.`bg`;
РЕЗУЛЬТАТЫ
| bg | num donor units | num acceptor units |
| --- | --------------- | ------------------ |
| A+ | 3 | 15 |
| AB+ | 38 | 33 |
Еще один запрос, который создает отчет о заказе:
select
a.`bg`,
sum(a.`amount`) as `num donor units`,
sum(b.`amount`) as `num acceptor units`,
if(sum(a.`amount`) < sum(b.`amount`),
CONCAT('Order ',sum(b.`amount`) - sum(a.`amount`),' Units'),
'None Needed') as 'Ordering'
from `donor` a
join `acceptor` b
on a.`bg` = b.`bg`
GROUP BY a.`bg`;
Результаты
| bg | num donor units | num acceptor units | Ordering |
| --- | --------------- | ------------------ | -------------- |
| A+ | 3 | 15 | Order 12 Units |
| AB+ | 38 | 33 | None Needed |