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

Nilai array ditampilkan di baris demi baris untuk id tunggal menggunakan Postgresql

Anda ingin mengelompokkan data Anda, jadi tempat yang harus dicari adalah di [daftar fungsi agregat] (https://www.postgresql.org/docs/current/functions-aggregate.html ), dalam hal ini adalah string_agg ( value text, delimiter text ) → text

Anda ingin menggabungkan data dari nama dan departemen dan Anda ingin nama dan departemen berada di baris terpisah seperti yang diperlihatkan dalam contoh. Untuk itu E'\n' pembatas harus digunakan:

SELECT
  id,
  string_agg(name, E'\n') as names,
  string_agg(dept, E'\n') as depts
FROM 
  data
GROUP BY
  id
ORDER BY
  id;

Jawabannya menunjukkan kepada Anda bagaimana dan komentar menjelaskan mengapa tidak . Pilihan ada di tangan Anda sekarang.

EDIT 1

Jika Anda lebih suka mempertahankan jumlah catatan dan menampilkan ID dengan baris pertama grup, maka Anda harus melihat ke fungsi jendela. Khususnya LAG .

SELECT
  CASE 
    WHEN id IS DISTINCT FROM LAG(id) OVER(order by id) THEN id 
    ELSE null 
  END as id,
  name,
  dept
FROM 
  data
order by
  data.id;

sql membandingkan id saat ini dengan salah satu baris sebelumnya dan menampilkannya atau nilai nol.




  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 cara menghapus indeks varchar_pattern_ops dalam migrasi Django (1.8)?

  2. Stempel waktu jOOQ disimpan dengan offset Zona Waktu lokal

  3. Rails:PG::InsufficientPrivilege:ERROR:izin ditolak untuk hubungan schema_migrations

  4. PostgreSQL - pemesanan bersyarat

  5. Django:NotImplementedError:annotate() + different(fields) tidak diimplementasikan