sql >> Database >  >> RDS >> Mysql

MySQL INNER JOIN van 3 tabellen met telling en totalen

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.



  1. Hoe installeer ik sqlcmd &bcp op Red Hat

  2. Voer een query uit met een LIMIT/OFFSET en verkrijg ook het totale aantal rijen

  3. hoe de functie in orakel aan te roepen

  4. MySQL:4 Table has-many-through Join?