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

PG ::Lỗi:SELECT DISTINCT, ORDER BY biểu thức phải xuất hiện trong danh sách lựa chọn

Tôi biết đây là một câu hỏi khá cũ, nhưng tôi chỉ lướt qua một ví dụ nhỏ trong đầu giúp tôi hiểu tại sao Postgres có hạn chế có vẻ kỳ quặc này đối với các cột CHỌN ĐƯỜNG LỐI / ĐẶT HÀNG THEO DÕI.

Hãy tưởng tượng bạn có dữ liệu sau trong bảng Rsvp của mình:

 event_id |        start_time
----------+------------------------
    0     | Mar 17, 2013  12:00:00
    1     |  Jan 1, 1970  00:00:00
    1     | Aug 21, 2013  16:30:00
    2     |  Jun 9, 2012  08:45:00

Bây giờ bạn muốn lấy một danh sách các event_id riêng biệt, được sắp xếp theo start_times tương ứng của chúng. Nhưng 1 nên ở đâu đi? Nó nên đến trước, vì một tuple bắt đầu vào ngày 1 tháng 1 năm 1970 hay nên kéo dài vì ngày 21 tháng 8 năm 2013?

Vì hệ thống cơ sở dữ liệu không thể đưa ra quyết định đó cho bạn và cú pháp của truy vấn không thể phụ thuộc vào dữ liệu thực tế mà nó có thể đang hoạt động (giả sử event_id là duy nhất), chúng tôi chỉ được phép sắp xếp thứ tự theo các cột từ SELECT mệnh đề.

Đối với câu hỏi thực tế - một giải pháp thay thế cho câu trả lời của Matthew là sử dụng một hàm tổng hợp như MIN hoặc MAX để phân loại:

  SELECT event_id
    FROM Rsvp
GROUP BY event_id
ORDER BY MIN(start_time)

Nhóm và tổng hợp rõ ràng trên start_time cho phép cơ sở dữ liệu đưa ra thứ tự rõ ràng của các bộ giá trị kết quả. Tuy nhiên, lưu ý rằng khả năng đọc chắc chắn là một vấn đề 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. Cách nhập cơ sở dữ liệu PostgreSQL bằng phpPgAdmin

  2. Bảng chữ cái với một số lượng lớn hoặc không xác định các danh mục

  3. PostgreSQL:chạy số hàng cho một truy vấn 'theo phút'

  4. Cách tốt nhất để tính kết quả trước khi LIMIT được áp dụng

  5. PostgreSQL Tạo cơ sở dữ liệu