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

क्या कोई इस एसक्यूएल को समझा सकता है? (और मैं इसे 'पैरामीट्रिज' कैसे कर सकता हूं और एक समारोह के रूप में आह्वान कर सकता हूं?)

आपका (सरलीकृत!) फ़ंक्शन इस तरह दिख सकता है:

CREATE OR REPLACE FUNCTION my_custom_grouping(integer)
RETURNS TABLE (
   grp integer,
   col1 double precision,
   col2 double precision,
   col3 double precision,
   col4 double precision,
   col5 double precision,
   col6 double precision,
   col7 double precision) AS
$BODY$
    SELECT ceil(rank() OVER (ORDER BY col1) / $1)::int as grp
          ,col1, col2, col3, col4, col5, col6, col7
    FROM   mytable 
    ORDER  BY 1;
$BODY$ LANGUAGE SQL;

प्रमुख बिंदु:

  • ध्यान दें कि यह language SQL है , इसलिए PL/pgSQL फ़ंक्शन नहीं है। आप language plpgsql का प्रयोग कर सकते हैं , भी, लेकिन यह यहाँ आवश्यक नहीं है।

  • मैंने आपके वूडू के मूल को विंडो फ़ंक्शन rank() , जो बिल्कुल वैसा ही करना चाहिए, बस सरल।

  • मैंने सबक्वायरी को भी पूरी तरह से हटा दिया। यह आवश्यक नहीं है।

  • टाइप double कहा जाता है double precision PostgreSQL में।

  • एकाधिक पंक्तियों को वापस करने के लिए, फ़ंक्शन को RETURNS SETOF record के रूप में परिभाषित करें या RETURNS TABLE जैसा मैंने किया।

  • ORDER BY स्थितीय मापदंडों का उपयोग कर सकते हैं, इसलिए आपको पहले कॉलम की गणना को फिर से लिखने की आवश्यकता नहीं है:ORDER BY 1 .
    हालाँकि, एक ही grp . में अनेक पंक्तियाँ . 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. PostgreSQL, Npgsql 42601 लौटा रहा है:सिंटैक्स त्रुटि $ 1 . पर या उसके पास

  2. PostgreSQL क्वेरी से sqlalchemy के साथ पंडों का डेटाफ्रेम लौटाएं

  3. स्क्रिप्ट के काम करने पर अब पोस्टग्रेज () टाइमस्टैम्प नहीं बदलता है

  4. x एक प्रक्रिया है, कॉल का उपयोग करें जब मैं पहले से ही कॉल का उपयोग कर रहा हूं

  5. अवैध निर्देश:4 Django चलाते समय