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;)