Da die Bestellungen über mit den Firmen verknüpft sind die Kunden, ich glaube nicht, dass Sie zwei separate Unterabfragen durchführen und ihnen beitreten müssen; eher, ich denke, Sie können einfach schreiben:
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
;
Hinzufügen bearbeitet: Allerdings muss ich sagen, dass das Schema für mich nicht wirklich Sinn ergibt. Sie haben eine Viele-zu-Viele-Beziehung zwischen Kunden und Unternehmen – also zum Beispiel John Smith
ist ein Kunde von Acme Widget Company
und von Intrepid Inc.
– aber dann sind Bestellungen nur Eigentum des Kunden, nicht des Unternehmens. Dies bedeutet, dass eine Bestellung John Smith
gehört , dann gehört zwangsläufig beides dazu an Acme Widget Company
und an Intrepid Inc.
. Ich glaube nicht, dass das stimmen kann. Statt einer customer_id
Feld, ich denke orders
muss eine companies_customers_id
haben Feld.