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

Nối nhiều hàng kết quả của một cột thành một, nhóm theo cột khác

Đơn giản hơn với hàm tổng hợp string_agg() (Postgres 9.0 trở lên):

SELECT movie, string_agg(actor, ', ') AS actor_list
FROM   tbl
GROUP  BY 1;

1 trong GROUP BY 1 là một tham chiếu vị trí và một lối tắt cho GROUP BY movie trong trường hợp này.

string_agg() mong đợi kiểu dữ liệu text làm đầu vào. Các loại khác cần được truyền một cách rõ ràng (actor::text ) - trừ khi truyền ngầm thành text được định nghĩa - đó là trường hợp cho tất cả các kiểu ký tự khác (varchar , character , "char" ), và một số loại khác.

Như isapir đã nhận xét, bạn có thể thêm ORDER BY mệnh đề trong lệnh gọi tổng hợp để có được danh sách đã sắp xếp - bạn có cần điều đó không. Như:

SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM   tbl
GROUP  BY 1;

Nhưng thường nhanh hơn để sắp xếp các hàng trong một truy vấn con. Xem:

  • Postgres SQL - Tạo mảng được chọn


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách current_timestamp () hoạt động trong PostgreSQL

  2. ĐẶT HÀNG THEO danh sách giá trị IN

  3. 3 Hàm lấy Ngày, Tháng và Năm từ một Ngày trong PostgreSQL

  4. Bạn cần cài đặt postgresql-server-dev-X.Y để tạo tiện ích mở rộng phía máy chủ hoặc libpq-dev để xây dựng ứng dụng phía máy khách

  5. Cách sử dụng các câu lệnh đã chuẩn bị với Postgres