Тъй като поръчките са свързани с фирмите чрез клиентите, не мисля, че трябва да изпълнявате две отделни подзаявки и да ги обединявате; по-скоро мисля, че можете просто да напишете:
SELECT companies.company AS "Company",
IFNULL(COUNT(DISTINCT companies_customers.customer_id), 0) AS "Total Customers",
IFNULL(SUM(orders.amount), 0) AS "All Orders Total"
FROM companies
LEFT
JOIN companies_customers
ON companies_customers.company_id = companies.id
LEFT
JOIN orders
ON orders.customer_id = companies_customers.customer_id
GROUP
BY companies.id
;
Редактирано за добавяне: Въпреки това трябва да кажа, че схемата наистина няма смисъл за мен. Имате връзка много към много между клиенти и компании — така например John Smith
е клиент на Acme Widget Company
и на Intrepid Inc.
— но тогава поръчките са просто собственост на клиента, не на компанията. Това означава, че ако една поръчка принадлежи на John Smith
, то задължително принадлежи на и двете до Acme Widget Company
и до Intrepid Inc.
. Не мисля, че това може да е правилно. Вместо да има customer_id
поле, мисля, че orders
трябва да има companies_customers_id
поле.