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

Giá trị mảng hiển thị theo từng hàng cho một id duy nhất bằng Postgresql

Bạn muốn nhóm dữ liệu của mình, vì vậy nơi cần tìm là trong [danh sách hàm tổng hợp] ( https://www.postgresql.org/docs/current/functions-aggregate.html ), trong trường hợp này nó là string_agg ( value text, delimiter text ) → text

Bạn muốn nối dữ liệu từ tên và phòng ban và bạn muốn tên và phòng ban nằm trong các dòng riêng biệt như trong ví dụ. Đối với điều đó, E'\n' dấu phân cách nên được sử dụng:

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

Câu trả lời chỉ cho bạn cách thực hiện và các nhận xét giải thích tại sao không nên . Sự lựa chọn là của bạn bây giờ.

CHỈNH SỬA 1

Nếu bạn muốn duy trì số lượng bản ghi và hiển thị ID với hàng đầu tiên của nhóm, thì bạn nên xem xét các hàm cửa sổ. Cụ thể là 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 so sánh id hiện tại với một trong những hàng trước đó và xuất ra nó hoặc giá trị null.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi khi mở pgAdmin 4 trên mac

  2. So sánh kết quả của hai hàm bảng bằng cách sử dụng một cột từ mỗi

  3. Chọn số hàng trong postgres

  4. Xử lý ngoại lệ PostgreSQL

  5. Theo dõi tính khả dụng cao cho PostgreSQL với Heartbeat