Poiché gli ordini sono collegati alle società via i clienti, non penso che tu debba eseguire due sottoquery separate e unirti a loro; piuttosto, penso che tu possa semplicemente scrivere:
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
;
Modificato per aggiungere: Detto questo, devo dire che lo schema non ha davvero senso per me. Hai una relazione molti-a-molti tra clienti e aziende, quindi, ad esempio, John Smith
è un cliente di Acme Widget Company
e di Intrepid Inc.
— ma gli ordini sono solo una proprietà del cliente, non della compagnia. Ciò significa che se un ordine appartiene a John Smith
, allora appartiene necessariamente a entrambi a Acme Widget Company
e a Intrepid Inc.
. Non credo che possa essere giusto. Invece di avere un customer_id
campo, penso orders
deve avere un companies_customers_id
campo.