注文は経由で会社にリンクされているため 顧客の皆さん、2つの別々のサブクエリを実行してそれらに参加する必要はないと思います。むしろ、私はあなたがただ書くことができると思います:
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
が必要です フィールド。