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

sql में एक कॉलम का उपयोग करके इसे क्लॉज द्वारा समूह में जोड़े बिना शामिल हों

आपको प्रति चालान एक पंक्ति की आवश्यकता है, इसलिए payment_invoice . को एकत्रित करें पहले - आपके शामिल होने से पहले सबसे अच्छा।
जब पूरी तालिका का चयन किया जाता है, तो यह आमतौर पर पहले एग्रीगेट करें और बाद में शामिल हों :

SELECT to_char(date_trunc('month', i.create_datetime), 'MM/YYYY') AS month
     , count(*)                                   AS total_invoice_count
     , (sum(i.total) - COALESCE(sum(pi.paid), 0)) AS outstanding_balance
FROM   invoice i
LEFT   JOIN  (
    SELECT invoice_id AS id, sum(amount) AS paid
    FROM   payment_invoice pi
    GROUP  BY 1
    ) pi USING (id)
GROUP  BY date_trunc('month', i.create_datetime)
ORDER  BY date_trunc('month', i.create_datetime);

LEFT JOIN यहाँ आवश्यक है। आप उन चालानों को खोना नहीं चाहते जिनकी payment_invoice . में कोई संगत पंक्तियाँ नहीं हैं (अभी तक), जो एक सादे JOIN . के साथ होगा .

तदनुसार, COALESCE() भुगतानों के योग के लिए, जो NULL हो सकता है।

SQL Fiddle बेहतर परीक्षण मामले के साथ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में टाइमज़ोन () फ़ंक्शन कैसे काम करता है

  2. PostgreSQL में एक बाधा को संशोधित करने का प्रयास कर रहा है

  3. ऑफ़सेट/सीमा प्रदर्शन अनुकूलन

  4. पोस्टग्रेज़ फ़ंक्शन दो तालिकाओं में एकाधिक रिकॉर्ड सम्मिलित करने के लिए

  5. बहुत अधिक कॉलम वाली तालिका के नुकसान