Karena pesanan ditautkan ke perusahaan melalui pelanggan, saya rasa Anda tidak perlu melakukan dua subkueri terpisah dan bergabung dengan mereka; sebaliknya, saya pikir Anda bisa menulis:
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
;
Diedit untuk menambahkan: Yang mengatakan, saya harus mengatakan bahwa skema itu tidak masuk akal bagi saya. Anda memiliki hubungan banyak-ke-banyak antara pelanggan dan perusahaan — jadi, misalnya, John Smith
adalah pelanggan Acme Widget Company
dan dari Intrepid Inc.
— tetapi pesanan hanyalah milik pelanggan, bukan dari perusahaan. Ini berarti bahwa jika pesanan milik John Smith
, maka itu pasti milik keduanya ke Acme Widget Company
dan ke Intrepid Inc.
. Saya tidak berpikir itu bisa benar. Alih-alih memiliki customer_id
bidang, saya pikir orders
harus memiliki companies_customers_id
lapangan.