Protože jsou objednávky propojeny se společnostmi přes zákazníci, nemyslím si, že musíte provádět dva samostatné dílčí dotazy a spojovat je; spíše si myslím, že můžete napsat:
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
;
Upraveno za účelem přidání: To znamená, že musím říci, že schéma pro mě opravdu nedává smysl. Mezi zákazníky a společnostmi máte mnohostranný vztah – takže například John Smith
je zákazníkem Acme Widget Company
a společnosti Intrepid Inc.
— ale pak jsou objednávky pouze vlastnictvím zákazníka, ne společnosti. To znamená, že pokud objednávka patří John Smith
, pak nutně patří obě na Acme Widget Company
a na Intrepid Inc.
. Myslím, že to nemůže být správné. Namísto customer_id
pole, myslím, že orders
musí mít companies_customers_id
pole.