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

PostgreSQL -phải xuất hiện trong mệnh đề GROUP BY hoặc được sử dụng trong một hàm tổng hợp

Nếu user_id CHÌA KHÓA CHÍNH thì bạn cần nâng cấp PostgreSQL; các phiên bản mới hơn sẽ xử lý chính xác việc nhóm theo khóa chính.

Nếu user_id không phải là duy nhất cũng không phải khóa chính cho mối quan hệ 'bất động sản' được đề cập, thì truy vấn này không có ý nghĩa nhiều, vì PostgreSQL không có cách nào để biết cái nào giá trị trả về cho mỗi cột của estates trong đó nhiều hàng chia sẻ cùng một user_id . Bạn phải sử dụng một hàm tổng hợp thể hiện những gì bạn muốn, chẳng hạn như min , max , avg , string_agg , array_agg , v.v. hoặc thêm (các) cột quan tâm vào GROUP BY .

Ngoài ra, bạn có thể đặt lại cụm từ truy vấn để sử dụng DISTINCT ON và một ORDER BY nếu bạn thực sự muốn chọn một hàng hơi tùy ý, mặc dù tôi thực sự nghi ngờ rằng có thể thể hiện điều đó qua ActiveRecord.

Một số cơ sở dữ liệu - bao gồm SQLite và MySQL - sẽ chỉ chọn một hàng tùy ý. Điều này được nhóm PostgreSQL coi là không chính xác và không an toàn, vì vậy PostgreSQL tuân theo tiêu chuẩn SQL và coi các truy vấn như vậy là lỗi.

Nếu bạn có:

col1    col2
fred    42
bob     9
fred    44
fred    99

và bạn làm:

SELECT col1, col2 FROM mytable GROUP BY col1;

thì rõ ràng là bạn nên lấy hàng:

bob     9

nhưng kết quả cho fred thì sao ? Không có câu trả lời đúng duy nhất để chọn, vì vậy cơ sở dữ liệu sẽ từ chối thực hiện các truy vấn không an toàn như vậy. Nếu bạn muốn điều tuyệt vời nhất col2 cho bất kỳ col1 nào bạn sẽ sử dụng max tổng hợp:

SELECT col1, max(col2) AS max_col2 FROM mytable GROUP BY col1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể viết các hàm PostgreSQL trên Ruby on Rails không?

  2. ver.2 LỖI PyGreSQL:from _pg import * ImportError:DLL load failed:Không tìm thấy mô-đun được chỉ định

  3. cách sửa lỗi OperationalError:(psycopg2.OperationalError) máy chủ đóng kết nối đột ngột

  4. psql:FATAL:cơ sở dữ liệu <người dùng> không tồn tại

  5. Với sqlalchemy cách liên kết động với công cụ cơ sở dữ liệu trên cơ sở mỗi yêu cầu