PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Fungsi agregat di atas array

Coba sesuatu seperti ini:

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

SELECT . ini akan memberi Anda 300 catatan per array300 dengan id yang sama dan memberi mereka bucket_num (1 untuk 3 elemen pertama, 2 untuk 3 berikutnya, dan seterusnya).

Kemudian gunakan pilihan ini untuk mendapatkan avg elemen dalam ember:

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

Selanjutnya - cukup gabungkan avg_val ke dalam larik:

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

Detail:unnest , ntile , array_agg , SELESAI (PARTISI OLEH )

UPD:Coba fungsi ini:

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;

Dibutuhkan satu array300 dan mengeluarkan satu array100 . Untuk menggunakannya:

SELECT id, array300_to_100(array300)
FROM table1;

Jika Anda kesulitan memahaminya - tanyakan saja kepada saya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menemukan posting yang ditandai dengan lebih dari satu tag di Rails dan Postgresql

  2. Pengaturan pelepasan string PostgreSQL

  3. Cara memasukkan dan menghapus data di PostgreSQL

  4. Postgresql menetapkan kueri pemilihan ke variabel dalam fungsi

  5. Grup penangkapan ekspresi reguler PostgreSQL di pilih