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

PostgreSQL में तीन तालिकाओं में शामिल होने के बाद पंक्तियों की गणना करें

अपने तर्क को सरल बनाने के लिए, पहले एकत्र करें, बाद में शामिल हों।

लापता विवरण का अनुमान लगाते हुए, यह क्वेरी आपको सटीक गणना देगी कि प्रत्येक उपयोगकर्ता को table1 में कितनी बार संदर्भित किया गया था और table2 क्रमशः सभी उपयोगकर्ताओं के लिए :

SELECT *
FROM   users u
LEFT   JOIN (
   SELECT updated_by_id AS id, count(*) AS t1_ct
   FROM   table1
   GROUP  BY 1
   ) t1 USING (id)
LEFT   JOIN (
   SELECT updated_by_id AS id, count(*) AS t2_ct
   FROM   table2
   GROUP  BY 1
   ) t2 USING (id);

विशेष रूप से, एक साथ जुड़ने पर कई 1-n रिश्तों को एक-दूसरे से गुणा करने से बचें:

एकल या कुछ उपयोगकर्ताओं . को पुनः प्राप्त करने के लिए केवल, LATERAL जॉइन तेजी से होगा (पोस्टग्रेज 9.3+):

SELECT *
FROM   users u
LEFT   JOIN  LATERAL (
   SELECT count(*) AS t1_ct
   FROM   table1
   WHERE  updated_by_id = u.id
   ) ON true
LEFT   JOIN  LATERAL (
   SELECT count(*) AS t2_ct
   FROM   table2
   WHERE  updated_by_id = u.id
   ) ON true
WHERE  u.id = 100;

कथित अंतर समझाएं

आपके द्वारा रिपोर्ट की गई विशेष बेमेल एक FULL OUTER JOIN :

तो आपको लापता मैचों के लिए संबंधित दूसरी तरफ NULL मान मिलते हैं। count() NULL मानों की गणना नहीं करता है। तो आप u1.id=100 . पर फ़िल्टर करते हैं या नहीं, इसके आधार पर आप एक अलग परिणाम प्राप्त कर सकते हैं या u2.id=100

यह केवल समझाने के लिए है, आपको FULL JOIN की आवश्यकता नहीं है यहां। इसके बजाय प्रस्तुत विकल्पों का प्रयोग करें।




  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. Psycopg2 में कनेक्शन के सभी प्रश्नों के लिए स्कीमा सेट करना:search_path सेट करते समय दौड़ की स्थिति प्राप्त करना

  3. psql क्वेरी परिणाम में टेबल बॉर्डर स्टाइल को कैसे बदलें

  4. मैं postgresql में अपनी क्वेरी से न्यूनतम, औसत और अधिकतम कैसे प्राप्त करूं?

  5. अगले अनुक्रम संख्या के साथ एक ग्रेल बनाई गई फ़ाइल में एक सम्मिलित कैसे सेट करें?