Я хочу отобразить всех клиентов и их адреса, а также количество и общую сумму их заказов. Мой запрос выглядит так:
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;
Но это очень медленно.
EDIT Я попробовал следующее, но мне сообщается, что поле 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;