Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL INNER JOIN на 3 таблици с брой и суми

Тъй като поръчките са свързани с фирмите чрез клиентите, не мисля, че трябва да изпълнявате две отделни подзаявки и да ги обединявате; по-скоро мисля, че можете просто да напишете:

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
;

Редактирано за добавяне: Въпреки това трябва да кажа, че схемата наистина няма смисъл за мен. Имате връзка много към много между клиенти и компании — така например John Smith е клиент на Acme Widget Company и на Intrepid Inc. — но тогава поръчките са просто собственост на клиента, не на компанията. Това означава, че ако една поръчка принадлежи на John Smith , то задължително принадлежи на и двете до Acme Widget Company и до Intrepid Inc. . Не мисля, че това може да е правилно. Вместо да има customer_id поле, мисля, че orders трябва да има companies_customers_id поле.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ПОРЪЧАЙТЕ ПО един идентификатор, когато има повече от същите идентификатори в една таблица

  2. Как да намерите активния брой връзки с отворена база данни в H2/MySQL

  3. SQL Последни снимки от контакти (групирани по контакт)

  4. Изчисление на Mysql в изявление за избор

  5. генерира дни от период от време