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

Menggabungkan semua nilai yang tidak berada dalam grup yang sama

Di Postgres 11 atau yang lebih baru, gunakan jendela fungsi dengan bingkai khusus dan frame_exclusion :

SELECT *, array_combine(values) OVER (ROWS BETWEEN UNBOUNDED PRECEDING
                                           AND UNBOUNDED FOLLOWING
                                           EXCLUDE CURRENT ROW) AS agg_values
FROM   tbl;

Jika name bukan UNIQUE , dan karena Anda bertanya:

SELECT *, array_combine(values) OVER (ORDER BY name
                                      ROWS BETWEEN UNBOUNDED PRECEDING
                                           AND UNBOUNDED FOLLOWING
                                           EXCLUDE GROUP) AS agg_values
FROM   tbl;

db<>fiddle di sini

Yang pertama (juga) bekerja dengan urutan baris yang berubah-ubah, hanya mengecualikan yang sekarang. Yang kedua membutuhkan ORDER BY untuk menentukan baris mana yang berada dalam grup yang sama.

Manual:

Penekanan saya yang berani.

Ini menggunakan fungsi agregat khusus array_combine(anyarray) disediakan oleh a_horse .
Atau di sini:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. paket panggilan fungsi postgreSQL

  2. pencarian teks lengkap postgres seperti operator

  3. Postgres FK referensi komposit PK

  4. VACUUM PostgreSQL dan ANALISIS Tips Praktik Terbaik

  5. Perbarui atau Sisipkan (beberapa baris dan kolom) dari subquery di PostgreSQL