चूंकि आदेश के माध्यम से . कंपनियों से जुड़े हुए हैं ग्राहक, मुझे नहीं लगता कि आपको दो अलग-अलग सबक्वेरी करने और उनसे जुड़ने की आवश्यकता है; बल्कि, मुझे लगता है कि आप बस लिख सकते हैं:
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
होना चाहिए फ़ील्ड.