Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL INNER JOIN 3 tabel z liczbą i sumami

Ponieważ zamówienia są powiązane z firmami przez klientów, myślę, że nie musisz wykonywać dwóch oddzielnych podzapytań i dołączać do nich; raczej myślę, że możesz po prostu napisać:

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
;

Zmieniono, aby dodać: To powiedziawszy, muszę powiedzieć, że schemat nie ma dla mnie sensu. Między klientami a firmami istnieje relacja wiele-do-wielu — na przykład John Smith jest klientem Acme Widget Company i firmy Intrepid Inc. — ale wtedy zamówienia są tylko własnością klienta, nie firmy. Oznacza to, że jeśli zamówienie należy do John Smith , to koniecznie należy do obydwóch do Acme Widget Company i do Intrepid Inc. . Nie sądzę, żeby to było właściwe. Zamiast posiadania customer_id pole, myślę, że orders musi mieć companies_customers_id pole.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć partycję dla każdego miesiąca bieżącego roku?

  2. Nieprzechwycony wyjątek „PDOException” z komunikatem „Brak aktywnej transakcji”?

  3. problem z GROUP_CONCAT w zapytaniu JOIN mysql

  4. Kiedy mam wywołać bind_param, jeśli używam przygotowanych instrukcji MySQLi w pętli?

  5. Jak WYBRAĆ WYRÓŻNIENIE *