Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL INNER JOIN von 3 Tabellen mit Anzahl und Summen

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.