Vì các đơn đặt hàng được liên kết với các công ty thông qua khách hàng, tôi không nghĩ bạn cần phải thực hiện hai truy vấn con riêng biệt và kết hợp chúng với nhau; đúng hơn, tôi nghĩ bạn chỉ có thể viết:
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
;
Đã chỉnh sửa để thêm: Điều đó nói rằng, tôi phải nói rằng lược đồ không thực sự có ý nghĩa đối với tôi. Bạn có mối quan hệ nhiều-nhiều giữa khách hàng và công ty - ví dụ:John Smith
là khách hàng của Acme Widget Company
và của Intrepid Inc.
- nhưng khi đó đơn đặt hàng chỉ là tài sản của khách hàng, không của công ty. Điều này có nghĩa là nếu một đơn đặt hàng thuộc về John Smith
, thì nó nhất thiết phải thuộc về cả hai tới Acme Widget Company
và tới Intrepid Inc.
. Tôi không nghĩ rằng điều đó có thể đúng. Thay vì có customer_id
trường, tôi nghĩ orders
cần có companies_customers_id
trường.