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

LIMIT/OFFSET के साथ एक क्वेरी चलाएँ और पंक्तियों की कुल संख्या भी प्राप्त करें

हां। एक साधारण विंडो फ़ंक्शन के साथ:

SELECT *, count(*) OVER() AS full_count
FROM   tbl
WHERE  /* whatever */
ORDER  BY col1
OFFSET ?
LIMIT  ?

ध्यान रखें कि कुल संख्या के बिना लागत काफी अधिक होगी, लेकिन आम तौर पर दो अलग-अलग प्रश्नों की तुलना में अभी भी सस्ता है। Postgres को वास्तव में सभी पंक्तियों को गिनना . है किसी भी तरह से, जो योग्यता पंक्तियों की कुल संख्या के आधार पर लागत लगाता है। विवरण:

  • LIMIT लागू होने से पहले परिणाम गणना प्राप्त करने का सबसे अच्छा तरीका

हालांकि , जैसा कि दानी ने बताया, जब OFFSET आधार क्वेरी से लौटाई गई पंक्तियों की संख्या कम से कम उतनी ही महान है, कोई पंक्तियाँ वापस नहीं की जाती हैं। इसलिए हमें full_count भी नहीं मिलता है ।

यदि यह स्वीकार्य नहीं है, तो एक संभावित हमेशा पूर्ण गणना वापस करने का समाधान एक सीटीई और एक OUTER JOIN . के साथ होगा :

WITH cte AS (
   SELECT *
   FROM   tbl
   WHERE  /* whatever */
   )
SELECT *
FROM  (
   TABLE  cte
   ORDER  BY col1
   LIMIT  ?
   OFFSET ?
   ) sub
RIGHT  JOIN (SELECT count(*) FROM cte) c(full_count) ON true;

आपको full_count . के साथ NULL मानों की एक पंक्ति मिलती है अगर OFFSET बहुत बडा है। वरना, यह पहली क्वेरी की तरह हर पंक्ति में जोड़ा जाता है।

यदि सभी NULL मानों वाली एक पंक्ति एक संभावित वैध परिणाम है, तो आपको offset >= full_count जांचना होगा खाली पंक्ति की उत्पत्ति को स्पष्ट करने के लिए।

यह अभी भी केवल एक बार आधार क्वेरी निष्पादित करता है। लेकिन यह क्वेरी में अधिक ओवरहेड जोड़ता है और केवल तभी भुगतान करता है जब यह गणना के लिए आधार क्वेरी को दोहराने से कम हो।

यदि अंतिम सॉर्ट ऑर्डर का समर्थन करने वाले इंडेक्स उपलब्ध हैं, तो यह ORDER BY . को शामिल करने के लिए भुगतान कर सकता है सीटीई में (अनावश्यक रूप से)।



  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. एक PostgreSQL तालिका से विशिष्ट पंक्तियों को INSERT SQL स्क्रिप्ट के रूप में निर्यात करें

  3. PostgreSQL क्वेरी में DESC ऑर्डर करते समय NULL मान पहले क्यों आते हैं?

  4. भारित पंक्ति संभावनाओं के साथ PostgreSQL तालिका से यादृच्छिक पंक्ति का चयन करें

  5. pgAudit का उपयोग करके PostgreSQL का ऑडिट करना