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

COUNT(*) चुनें - यदि कोई मेल खाने वाली पंक्तियाँ नहीं हैं तो समूहीकृत फ़ील्ड के साथ 0 लौटाएँ

संभव नहीं? चुनौती स्वीकार की गई। :)

WITH x(employee, department) AS (
   VALUES
    (1::int, 2::int)
   ,(3, 4)
   ,(5, 6)
    -- ... more combinations
   )
SELECT x.employee, x.department, count(i.employee) AS ct
FROM   x
LEFT   JOIN items i ON i.employee = x.employee
                   AND i.department = x.department
                   AND i.available
GROUP  BY x.employee, x.department;

यह आपको बिल्कुल देगा तुम क्या मांग रहे हो। अगर employee और department पूर्णांक नहीं हैं, मिलान प्रकार में डाले गए हैं।

@ypercube से प्रति टिप्पणी:गिनती () को items के एक गैर-शून्य कॉलम पर होना चाहिए , इसलिए हमें 0 . मिलता है गैर-मौजूदा मानदंड के लिए, नहीं 1

साथ ही, LEFT JOIN में अतिरिक्त मानदंड भी शामिल करें शर्त (i.available इस मामले में), इसलिए आप गैर-मौजूदा मानदंडों को बाहर नहीं करते हैं।

प्रदर्शन

टिप्पणी में अतिरिक्त प्रश्न को संबोधित करना।
यह बहुत अच्छा प्रदर्शन करना चाहिए। मानदंड की लंबी सूची के साथ, (LEFT) JOIN शायद सबसे तेज़ तरीका है।

यदि आपको जितनी जल्दी हो सके इसकी आवश्यकता है, एक बहुस्तंभ बनाना सुनिश्चित करें अनुक्रमणिका जैसे:

CREATE INDEX items_some_name_idx ON items (employee, department);

अगर (employee, department) PRIMARY KEY होना चाहिए या आपके पास UNIQUE होना चाहिए दो स्तंभों पर बाधा, यह भी काम करेगा।



  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. मैं लैरवेल का उपयोग करके डीबी में बाइनरी डेटा कैसे सम्मिलित करूं?

  3. Postgresql:FATAL:भूमिका मौजूद नहीं है

  4. Psycopg / Postgres :कनेक्शन बेतरतीब ढंग से लटकते हैं

  5. Heroku - ActionView::Template::Error (PG::Error:ERROR:column category_products.desc मौजूद नहीं है)