Aangezien de bestellingen zijn gekoppeld aan de bedrijven via de klanten, ik denk niet dat je twee afzonderlijke subquery's hoeft uit te voeren en ze samen te voegen; ik denk eerder dat je gewoon kunt schrijven:
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
;
Bewerkt om toe te voegen: Dat gezegd hebbende, moet ik zeggen dat het schema voor mij niet echt logisch is. U hebt een veel-op-veel-relatie tussen klanten en bedrijven, dus bijvoorbeeld John Smith
is een klant van Acme Widget Company
en van Intrepid Inc.
— maar dan zijn bestellingen gewoon eigendom van de klant, niet van het bedrijf. Dit betekent dat als een bestelling toebehoort aan John Smith
, dan hoort het noodzakelijkerwijs bij beide naar Acme Widget Company
en aan Intrepid Inc.
. Ik denk niet dat dat kan kloppen. In plaats van een customer_id
veld, ik denk orders
moet een companies_customers_id
. hebben veld.