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

PostgreSQL जहां गिनती की स्थिति

SELECT a.license_id, a.limit_call
     , count(b.license_id) AS overall_count
FROM   "License"  a
LEFT   JOIN "Log" b USING (license_id)
WHERE  a.license_id = 7 
GROUP  BY a.license_id  -- , a.limit_call  -- add in old versions
HAVING a.limit_call > count(b.license_id)

चूंकि 9.1 पोस्टग्रेज प्राथमिक कुंजी GROUP BY में तालिका के सभी स्तंभों को कवर करती है खंड। पुराने संस्करणों में आपको a.limit_call . जोड़ना होगा GROUP BY . पर सूची। 9.1 के लिए रिलीज़ नोट:

<ब्लॉकक्वॉट>

गैर-GROUP BY . को अनुमति दें जब प्राथमिक कुंजी GROUP BY . में निर्दिष्ट की जाती है, तो क्वेरी लक्ष्य सूची में कॉलम खंड

आगे पढ़ना:

  • जब मैं एक कुंजी द्वारा एकत्र करता हूं, तो मैं 'ग्रुप बाय' से आश्रित कॉलम को क्यों नहीं निकाल सकता?

WHERE . में आपके पास जो स्थिति थी क्लॉज को HAVING . पर ले जाना है खंड क्योंकि यह एक समग्र कार्य के परिणाम को संदर्भित करता है (बाद WHERE लागू किया है)। और आप आउटपुट कॉलम का संदर्भ नहीं ले सकते हैं (कॉलम उपनाम) HAVING . में क्लॉज, जहां आप केवल इनपुट कॉलम का संदर्भ दे सकते हैं। तो आपको अभिव्यक्ति दोहरानी होगी। मैनुअल:

<ब्लॉकक्वॉट>

ORDER BY में कॉलम के मान को संदर्भित करने के लिए आउटपुट कॉलम के नाम का उपयोग किया जा सकता है और GROUP BY खंड, लेकिन WHERE . में नहीं या HAVING खंड; वहां आपको इसके बजाय व्यंजक लिखना होगा।

मैंने FROM . में तालिकाओं के क्रम को उलट दिया क्लॉज और सिंटैक्स को कम भ्रमित करने के लिए थोड़ा सा साफ किया। USING यहाँ केवल एक उल्लेखनीय सुविधा है।

मैंने LEFT JOIN . का उपयोग किया JOIN . के बजाय , इसलिए आप बिना किसी लॉग के लाइसेंस को बिल्कुल भी बाहर नहीं करते हैं।

केवल गैर-शून्य मानों की गणना count() द्वारा की जाती है . चूंकि आप संबंधित प्रविष्टियों की गणना करना चाहते हैं तालिका में "Log" count(b.license_id) . का उपयोग करना सुरक्षित और थोड़ा सस्ता है . इस कॉलम का उपयोग जॉइन में किया जाता है, इसलिए हमें परेशान होने की जरूरत नहीं है कि कॉलम शून्य हो सकता है या नहीं।
count(*) और भी छोटा और थोड़ा तेज़ है, फिर भी। यदि आपको 1 . की गिनती प्राप्त करने में कोई आपत्ति नहीं है 0 . के लिए बाईं तालिका में पंक्तियाँ, उसका उपयोग करें।

इसके अलावा:मैं सलाह दूंगा नहीं मिश्रित केस पहचानकर्ताओं . का उपयोग करने के लिए यदि संभव हो तो पोस्टग्रेज में। बहुत त्रुटि प्रवण।



  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 9.4 में सुधार के कुछ क्षेत्र

  2. क्या कई-से-अनेक संघों के लिए तालिका में शामिल होने के लिए कोई विकल्प हैं?

  3. Postgres . में एक डेटाबेस से दूसरे डेटाबेस में एक टेबल कॉपी करें

  4. PostgreSQL में NULL मानों को संभालने के लिए COALESCE का उपयोग करना

  5. हाइबरनेट क्वेरी का उपयोग करना:कोलन को पैरामीटर/एस्केपिंग कोलन के रूप में माना जाता है