PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chọn nhiều giá trị hàng thành một hàng duy nhất với các mệnh đề nhiều bảng

Nếu mỗi thuộc tính chỉ có một giá trị duy nhất cho một người dùng, bạn có thể bắt đầu bằng cách tạo một ma trận thưa thớt:

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;

Sau đó nén ma trận bằng hàm tổng hợp:

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;

Để trả lời nhận xét, tìm kiếm theo tên thuộc tính thay vì 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. hàm UNIX_TIMESTAMP không tồn tại

  2. Các truy vấn Java chống lại PGPool II gây ra câu lệnh chuẩn bị không tên không tồn tại lỗi

  3. Cách tìm chuỗi con trong SQL (Postgres)

  4. Lưu theo thứ tự từ nhiều đến nhiều

  5. Tại sao truy vấn không được lưu trong tệp csv trong khi nó có vẻ bình thường trong bảng điều khiển postgresql