Da ordrerne er knyttet til virksomhederne via kunderne, jeg tror ikke, du behøver at udføre to separate underforespørgsler og slutte dig til dem; jeg tror snarere, at du bare kan skrive:
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
;
Redigeret for at tilføje: Når det er sagt, må jeg sige, at skemaet ikke rigtig giver mening for mig. Du har et mange-til-mange forhold mellem kunder og virksomheder — så f.eks. John Smith
er kunde hos Acme Widget Company
og af Intrepid Inc.
- men så er ordrer kun kundens ejendom, ikke af virksomheden. Det betyder, at hvis en ordre tilhører John Smith
, så hører det nødvendigvis til begge til Acme Widget Company
og til Intrepid Inc.
. Det tror jeg ikke kan være rigtigt. I stedet for at have et customer_id
felt, tror jeg orders
skal have et companies_customers_id
felt.