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

Tổng hợp một cột duy nhất trong truy vấn với nhiều cột

Truy vấn đơn giản

Điều này có thể đơn giản hơn nhiều với PostgreSQL 9.1 trở lên . Như đã giải thích trong câu trả lời có liên quan chặt chẽ này:

  • PGError:ERROR:không được phép tổng hợp trong mệnh đề WHERE trên truy vấn AR của một đối tượng và has_many đối tượng của nó

Nó là đủ để GROUP BY khóa chính của một bảng. Kể từ:

foo1 là một khóa chính

.. bạn có thể đơn giản hóa ví dụ của mình thành:

SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ')
FROM   tbl1
GROUP  BY 1
ORDER  BY foo7, foo8;  -- have to be spelled out, since not in select list!

Truy vấn với nhiều bảng

Tuy nhiên, vì bạn có:

nhiều trường khác và THAM GIA TRÁI, phần quan trọng là tất cả các trường này có mối quan hệ từ 1 đến 1 hoặc 1 đến 0 ngoại trừ một trường từ 1 đến n mà tôi muốn tổng hợp lại

.. sẽ nhanh hơn và đơn giản hơn nếu tổng hợp trước, tham gia sau :

SELECT t1.foo1, t1.foo2, ...
     , t2.bar1, t2.bar2, ...
     , a.aggregated_col 
FROM   tbl1 t1
LEFT   JOIN tbl2 t2 ON ...
...
LEFT   JOIN (
   SELECT some_id, string_agg(agg_col, ', ') AS aggregated_col
   FROM   agg_tbl a ON ...
   GROUP  BY some_id
   ) a ON a.some_id = ?.some_id
ORDER  BY ...

Bằng cách này, phần lớn truy vấn của bạn không cần tổng hợp.

Gần đây tôi đã cung cấp một trường hợp thử nghiệm trong SQL Fiddle để chứng minh quan điểm trong câu trả lời có liên quan này:

  • PostgreSQL - sắp xếp theo một mảng

Vì bạn đang đề cập đến câu trả lời có liên quan này:Không, DISTINCT sẽ không giúp ích được gì trong trường hợp này.



  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àm cách nào để cài đặt pg gem của PostgreSQL trên Ubuntu?

  2. CHỌN hoặc THỰC HIỆN trong một hàm PL / pgSQL

  3. pip cài đặt không thành công với / usr / bin / clang:Không có tệp hoặc thư mục như vậy

  4. Thực hiện truy vấn hàng giờ hoạt động này trong PostgreSQL

  5. Ánh xạ kiểu nối tiếp PostgreSQL với chú thích Hibernate