Я хочу отобразить всех клиентов и их адреса, а также количество и общую сумму их заказов.Мой запрос выглядит следующим образом:
select *, sum(o.tota), count(o.total)
from customer c
natural join orders o
group by c.custId;
, который отлично работает.
, но если я добавлю новую таблицу к запросу:
select *, sum(o.tota), count(o.total)
from customer c
natural join orders o
natural join cust_addresses a
group by c.custId;
, то он не будетработать больше.агрегатные функции возвращают неправильные значения, потому что может быть несколько адресов на одного клиента, и это правильно, я также хочу отобразить все их адреса.Что я могу сделать, чтобы решить проблему с агрегатной функцией?
Я мог бы подумать о том, чтобы сделать что-то вроде:
select *, (select total from orders o where o.custid=c.custid), ..
from customer c
natural join orders o
natural join cust_addresses a
group by c.custId;
Но это очень медленно.
РЕДАКТИРОВАТЬ Теперь я попробовал следующее, но оно говорит мне, что поле c.custid неизвестно:
select *
from
customer c,
left join (select sum(o.tota), count(o.total) from orders o where o.custid=c.custid) as o
where ...
group by c.custId;