Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL INNER गिनती और योग के साथ 3 तालिकाओं में शामिल हों

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

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 होना चाहिए फ़ील्ड.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पेजिनेशन पर एसक्यूएल त्रुटि

  2. MYSQL क्लोज कनेक्ट इन्सर्ट गतिविधि को रोक नहीं सकता

  3. MySQL से डेटा पुनर्प्राप्त करना - केवल उपयोगकर्ता में लॉग इन किया गया

  4. तालिका से इतिहास की जाँच करना और उसके अनुसार रिकॉर्ड को Mysql में चिह्नित करना

  5. मैसकल फाइंड_इन_सेट स्लैश (/) सेपरेटर