sql >> Databáze >  >> RDS >> Mysql

MySQL VNITŘNÍ SPOJENÍ 3 tabulek s počtem a součty

Protože jsou objednávky propojeny se společnostmi přes zákazníci, nemyslím si, že musíte provádět dva samostatné dílčí dotazy a spojovat je; spíše si myslím, že můžete napsat:

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
;

Upraveno za účelem přidání: To znamená, že musím říci, že schéma pro mě opravdu nedává smysl. Mezi zákazníky a společnostmi máte mnohostranný vztah – takže například John Smith je zákazníkem Acme Widget Company a společnosti Intrepid Inc. — ale pak jsou objednávky pouze vlastnictvím zákazníka, ne společnosti. To znamená, že pokud objednávka patří John Smith , pak nutně patří obě na Acme Widget Company a na Intrepid Inc. . Myslím, že to nemůže být správné. Namísto customer_id pole, myslím, že orders musí mít companies_customers_id pole.



  1. FIND_IN_SET() alternativa?

  2. Převést formát data SQL? [dd.mm.yy až RRRR-MM-DD]

  3. Použití parametrů pro mysql_query

  4. Volejte funkci vracející sadu s argumentem pole vícekrát