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

सर्कुलर औसत के लिए कस्टम PostgreSQL समुच्चय

आप एक ARRAY . का उपयोग कर सकते हैं आंतरिक टाइप करें। तर्क प्रकार अभी भी कोई भी संख्यात्मक प्रकार हो सकता है। float के साथ प्रदर्शन करना (=double precision ):

CREATE OR REPLACE FUNCTION f_circavg (float[], float)
  RETURNS float[] LANGUAGE sql STRICT AS
'SELECT ARRAY[$1[1] + sin($2), $1[2] + cos($2), 1]';

CREATE OR REPLACE FUNCTION f_circavg_final (float[])
  RETURNS float  LANGUAGE sql AS
'SELECT CASE WHEN $1[3] > 0 THEN atan2($1[1], $1[2]) END';

CREATE AGGREGATE circavg (float) (
   sfunc     = f_circavg
 , stype     = float[]
 , finalfunc = f_circavg_final
 , initcond  = '{0,0,0}'
);

ट्रांज़िशन फ़ंक्शन f_circavg() परिभाषित किया गया है STRICT , इसलिए यह NULL . वाली पंक्तियों पर ध्यान नहीं देता इनपुट। यह एक या अधिक इनपुट पंक्तियों के साथ सेट की पहचान करने के लिए तीसरा सरणी तत्व भी सेट करता है - अन्यथा CASE अंतिम फ़ंक्शन NULL लौटाता है ।

परीक्षण के लिए अस्थायी तालिका:

CREATE TEMP TABLE t (x float);
INSERT INTO t VALUES (2), (NULL), (3), (4), (5);

मैंने एक NULL में फेंक दिया STRICT का परीक्षण करने के लिए मान भी जादू। कॉल करें:

SELECT circavg(x) FROM t;

       circavg
-------------------
 -2.78318530717959

क्रॉस चेक:

SELECT atan2(sum(sin(x)), sum(cos(x))) FROM t;

       atan2
-------------------
 -2.78318530717959

वही लौटाता है। काम करने लगता है। एक बड़ी तालिका के साथ परीक्षण में नियमित समग्र कार्यों के साथ अंतिम अभिव्यक्ति कस्टम कुल से 4x तेज थी।

शून्य इनपुट पंक्तियों / केवल NULL इनपुट के लिए परीक्षण करें:

SELECT circavg(x) FROM t WHERE false;     -- no input rows
SELECT circavg(x) FROM t WHERE x IS NULL; -- only NULL input

रिटर्न NULL दोनों ही मामलों में।



  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 12 . के लिए डेटाबेस प्रबंधन और निगरानी

  2. SQLAlchemy क्वेरी त्रुटि दिखाती है तालिका/चयन योग्य 'वर्कफ़्लो' को स्वयं में शामिल नहीं कर सकती

  3. रेल/पोस्टग्रेज, 'विदेशी कुंजी' सरणी में संग्रहीत 1-कई एसोसिएशन बनाने के लिए

  4. सीएसवी डेटा को रेल ऐप में आयात करना, किसी अन्य चीज़ का उपयोग करके एसोसिएशन आईडी

  5. PostgreSQL में क्वेरी ऑप्टिमाइज़ेशन। मूल बातें समझाएं - भाग 1