sql >> Database teknologi >  >> RDS >> Mysql

MySQL INNER JOIN af 3 borde med antal og totaler

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.



  1. DATEDIFF_BIG() Eksempler i SQL Server

  2. Skjulte funktioner i Oracle

  3. Gruppér fortløbende værdier i MySQL og tilføj et id til sådanne grupper

  4. Implementering af en hierarkisk datastruktur i en database