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

Pilih beberapa nilai baris menjadi satu baris dengan klausa multi-tabel

Jika setiap atribut hanya memiliki satu nilai untuk pengguna, Anda dapat memulai dengan membuat matriks sparse:

SELECT user_id
      ,CASE WHEN attrib_id = 1 THEN value ELSE NULL END AS attrib_1_val
      ,CASE WHEN attrib_id = 2 THEN value ELSE NULL END AS attrib_2_val
  FROM UserAttribute;

Kemudian kompres matriks menggunakan fungsi agregat:

SELECT user_id
      ,MAX(CASE WHEN attrib_id = 1 THEN value ELSE NULL END) AS attrib_1_val
      ,MAX(CASE WHEN attrib_id = 2 THEN value ELSE NULL END) AS attrib_2_val
  FROM UserAttribute
  GROUP BY user_id;

Menanggapi komentar, mencari berdasarkan nama atribut daripada id:

SELECT ua.user_id
      ,MAX(CASE WHEN a.attrib_name = 'attrib1' THEN ua.value ELSE NULL END) AS attrib_1_val
      ,MAX(CASE WHEN a.attrib_name = 'attrib2' THEN ua.value ELSE NULL END) AS attrib_2_val
  FROM UserAttribute ua
  JOIN Attribute a ON (a.attrib_id = ua.attrib_id)
  WHERE a.attrib_name IN ('attrib1', 'attrib2')
  GROUP BY ua.user_id;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan rekor nilai tertinggi kedua ke terendah berdasarkan urutan berdasarkan bidang di PostgreSQL

  2. Menggabungkan String dan Angka di PostgreSQL

  3. PostgreSQL - pembulatan angka floating point

  4. Memetakan array dengan Hibernate

  5. kolom users.id harus muncul di klausa GROUP BY atau digunakan dalam fungsi agregat