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

सरणियों पर कुल कार्य

कुछ इस तरह का प्रयास करें:

SELECT id, unnest(array300) as val, ntile(100) OVER (PARTITION BY id) as bucket_num
FROM your_table

यह SELECT आपको प्रति array300 में 300 रिकॉर्ड देगा एक ही id . के साथ और उन्हें bucket_num (1 प्राथमिकी 3 तत्वों के लिए, 2 अगले 3 के लिए, और इसी तरह)।

फिर avg . प्राप्त करने के लिए इस चयन का उपयोग करें बाल्टी में तत्वों की:

SELECT id, avg(val) as avg_val
FROM (...previous select here...)
GROUP BY id, bucket_num

अगला - बस avg_val को एकत्रित करें सरणी में:

SELECT id, array_agg(avg_val) as array100
FROM (...previous select here...)
GROUP BY id

विवरण:अननेस्ट , ntile , array_agg , ओवर (पार्टिशन बाय )

UPD:इस फ़ंक्शन को आज़माएं:

CREATE OR REPLACE FUNCTION public.array300_to_100 (
  p_array300 numeric []
)
RETURNS numeric [] AS
$body$
DECLARE
  dim_start int = array_length(p_array300, 1); --size of input array
  dim_end int = 100; -- size of output array
  dim_step int = dim_start / dim_end; --avg batch size
  tmp_sum NUMERIC; --sum of the batch
  result_array NUMERIC[100]; -- resulting array
BEGIN

  FOR i IN 1..dim_end LOOP --from 1 to 100.
    tmp_sum = 0;

    FOR j IN (1+(i-1)*dim_step)..i*dim_step LOOP --from 1 to 3, 4 to 6, ...
      tmp_sum = tmp_sum + p_array300[j];  
    END LOOP; 

    result_array[i] = tmp_sum / dim_step;
  END LOOP; 

  RETURN result_array;
END;
$body$
LANGUAGE 'plpgsql'
IMMUTABLE
RETURNS NULL ON NULL INPUT;

इसमें एक array300 लगता है और एक array100 . को आउटपुट करता है . इसका उपयोग करने के लिए:

SELECT id, array300_to_100(array300)
FROM table1;

अगर आपको इसे समझने में कोई समस्या है - बस मुझसे पूछें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पैरामीटर NULL होने पर कॉलम में DEFAULT मान डालना

  2. Postgresql में किसी सरणी के किसी भी आकार के सभी संयोजन (सबसेट) कैसे खोजें?

  3. क्लाउड मेड ईज़ी में PostgreSQL लोड बैलेंसिंग

  4. सरणी मानों को पूर्णांक में संग्रहीत करना

  5. SQL में मिलान एल्गोरिथ्म