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

क्लॉज द्वारा SELECT, WHERE और ORDER के लिए परिणाम का पुन:उपयोग कैसे करें?

GROUP BY . में और ORDER BY क्लॉज आप कॉलम एलियासेस (आउटपुट कॉलम) या यहां तक ​​कि SELECT . के ऑर्डिनल नंबर का भी उल्लेख कर सकते हैं सामान सूचि। मैं ORDER BY . पर मैनुअल उद्धृत करता हूं :

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

प्रत्येक व्यंजक एक आउटपुट कॉलम का नाम या क्रमांक संख्या हो सकता है(सूची आइटम चुनें) , या यह इनपुट-कॉलम मानों से निर्मित एक मनमाना व्यंजक हो सकता है।

बोल्ड जोर मेरा।

लेकिन WHERE . में और HAVING क्लॉज, आप केवल बेस टेबल (इनपुट कॉलम) से कॉलम का उल्लेख कर सकते हैं, इसलिए आपको अपने फंक्शन कॉल को स्पेल करना होगा।

SELECT *, earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon)) AS dist
FROM   venues 
WHERE  earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon)) <= radius 
ORDER  BY distance;

यदि आप जानना चाहते हैं कि सीटीई या सबक्वेरी में गणना को पैक करना तेज़ है या नहीं, तो बस इसे EXPLAIN ANALYZE के साथ जांचें। . (मुझे शक है।)

SELECT *
FROM  (
   SELECT *
         ,earth_distance(ll_to_earth(62.0, 25.0), ll_to_earth(lat, lon)) AS dist
   FROM   venues
   ) x
WHERE  distance <= radius 
ORDER  BY distance;

जैसे @Mike ने एक फंक्शन STABLE . घोषित करके कमेंट किया (या IMMUTABLE ) आप क्वेरी प्लानर को सूचित करते हैं कि फ़ंक्शन कॉल के परिणाम एक ही स्टेटमेंट में समान कॉल के लिए कई बार पुन:उपयोग किए जा सकते हैं। मैं यहां मैनुअल को उद्धृत करता हूं:

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

एक स्थिर फ़ंक्शन डेटाबेस को संशोधित नहीं कर सकता है और एक ही कथन के भीतर सभी पंक्तियों के लिए समान तर्क दिए गए समान परिणामों को वापस करने की गारंटी है। यह श्रेणी ऑप्टिमाइज़र को फ़ंक्शन की एक से अधिक कॉल को एक कॉल के लिए अनुकूलित करने की अनुमति देती है

बोल्ड जोर मेरा।



  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 ट्रिगर से ईमेल कैसे भेज सकता हूं?

  3. पोस्टग्रेज क्वेरी ऑप्टिमाइज़ेशन (इंडेक्स स्कैन के लिए बाध्य करना)

  4. थ्रेसहोल्ड तक पहुंचने के बाद चल रहे एसयूएम को रीसेट कैसे करें?

  5. NULL मानों के साथ NOT LIKE का व्यवहार