У меня есть 2 таблицы Comapnies и Trades: Компании:
Страна | центр |
---|---|
Абсолют | Математика |
Алиса сп. | Волшебная страна |
Аркус т.г. | Математика |
Маленькая русалка | Подводное царство |
Торги:
я бы | продавец | покупатель | ценность |
---|---|---|---|
20120125 | Алиса сп. | Аркус т.г. | 100 |
20120216 | Маленькая русалка | Абсолют | 30 |
20120217 | Маленькая русалка | Абсолют | 50 |
20121107 | Маленькая русалка | Алиса сп. | 10 |
Запрос, который я использовал:
select country
,(select sum(value) from trades t1 where c.name = t1.buyer) as imports
,(select sum(value) from trades t2 where c.name = t2.seller) as exports
from companies c
group by country
order by country;
Я не получаю вывод, как требуется.
требуемый вывод:
страна | Экспорт | импорт |
---|---|---|
Математика | 30 | 180 |
Ничто | 0 | 0 |
Подводное царство | 90 | 0 |
Волшебная страна | 100 | 40 |
Что я получаю:
страна | Импорт | Экспорт |
---|---|---|
Математика | 80 | НУЛЕВОЙ |
Ничто | НУЛЕВОЙ | НУЛЕВОЙ |
Подводное царство | НУЛЕВОЙ | 90 |
Волшебная страна | 10 | 100 |
Вы можете использовать условную агрегацию
select c.center
, sum(case c.Country when t.seller then value end) export
, sum(case c.Country when t.buyer then value end) import
from Comapnies c
left join Trades t on c.Country in (t.seller, t.buyer)
group by c.center
order by c.center;
Я использую имена столбцов из ваших образцов данных.
Это заработало после нескольких изменений
Это дает мне все как ноль