मेरे पास दो टेबल हैं। एक में आइटम की मात्रा के साथ ऑफ़र होते हैं, और दूसरे में ऑफ़र के लिए आइटम का आवंटन होता है। मैं एक क्वेरी लिखने की कोशिश कर रहा हूं जो आइटम की पेशकश की गई तालिका और कुल आवंटित राशि, प्रति ऑफ़र दिखाती है।
नमूना तालिका `प्रदान करता है:
+----+----+----+
|oid |uid |amt |
+----+----+----+
| 1| 413| 10|
| 2| 297| 7|
+----+----+----+
नमूना तालिका `आवंटन`:
+----+----+------+
|aid |oid |alloc |
+----+----+------+
| 1| 2| 4|
| 2| 2| 2|
+----+----+------+
मैं निम्नलिखित परिणाम चाहता हूं:
+----+----+------+
|oid |amt |alloc |
+----+----+------+
| 1| 10| 0|
| 2| 7| 6|
+----+----+------+
मैंने निम्नलिखित प्रश्न का प्रयास किया:
SELECT `offers`.`oid`, `offers`.`amt`, COALESCE(SUM(`allocations`.`alloc`),0)
FROM `offers`
LEFT JOIN `allocations` ON `allocations`.`oid`=`offers`.`oid`
हालाँकि, योग पूरी तालिका पर काम करता है, न कि केवल प्रविष्टियाँ जो संतुष्ट करती हैं
`allocations`.`oid`=`offers`.`oid`
और ऐसे ऑफ़र जिनकी कोई आवंटन नहीं है, मुद्रित नहीं होते हैं।
3 जवाब
ग्रुप बाय का उपयोग करके देखें।
SELECT `offers`.`oid`, `offers`.`amt`, COALESCE(SUM(`allocations`.`alloc`),0)
FROM `offers`
LEFT JOIN `allocations` ON `allocations`.`oid`=`offers`.`oid`
GROUP BY offers.oid
(मुझे लगता है offers.oid
आपकी प्राथमिक कुंजी है?)
सख्ती से, यह होना चाहिए
GROUP BY offers.oid, offers.amt
जो यह कहना चाहता है कि किसी भी कार्य को एक समुच्चय समारोह का परिणाम GROUP BY
खंड में सूचीबद्ध नहीं किया जाना चाहिए। कुछ सर्वर इसे लागू करने के लिए कॉन्फ़िगर किए गए हैं, जबकि कुछ नहीं हैं।
जब तक आप एक समूह को खंड द्वारा प्रदान नहीं करते हैं, तब तक कोई भी कुल कार्य, जैसे योग () पूरे परिणाम में काम करेगा।
SELECT `offers`.`oid`, `offers`.`amt`, COALESCE(SUM(`allocations`.`alloc`),0)
FROM `offers`
LEFT JOIN `allocations` ON `allocations`.`oid`=`offers`.`oid`
GROUP BY `offers`.`oid`, `offers`.`amt`
हालाँकि, मुझे 'ऑफ़र नहीं मिलते हैं, जिनके आवंटन आवंटित नहीं होते हैं, मुद्रित नहीं होते हैं', क्योंकि बाएं हाथ को इस बात का ध्यान रखना चाहिए, जब तक कि आपकी वास्तविक क्वेरी में 2 तालिकाओं के क्रम उलट न हों।
तो यहाँ आपको प्रत्येक oid के लिए योग करने के लिए समूह द्वारा समूह का उपयोग करना होगा ...
SELECT `offers`.`oid`, `offers`.`amt`, COALESCE(SUM(`allocations`.`alloc`),0) FROM `offers`
LEFT JOIN `allocations` ON `allocations`.`oid`=`offers`.`oid` group by oid
संबंधित सवाल
नए सवाल
mysql
MySQL एक फ्री, ओपन सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है जो स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) का उपयोग करता है। इस टैग को अन्य DBs जैसे SQL Server, SQLite आदि के लिए उपयोग न करें। वे विभिन्न DB हैं जो सभी डेटा का प्रबंधन करने के लिए SQL की अपनी बोलियों का उपयोग करते हैं।