Tôi tin rằng PostgreSQL (ít nhất 8.3) sẽ yêu cầu biểu thức DISTINCT ON
phải khớp với biểu thức ORDER BY
ban đầu. I E. bạn không thể sử dụng DISTINCT ON (accountid)
khi bạn có ORDER BY score DESC
. Để khắc phục điều này, hãy thêm nó vào trong ORDER BY
:
SELECT DISTINCT ON (accountid) *
FROM scoretable
ORDER BY accountid, score DESC
LIMIT 10;
Sử dụng phương pháp này cho phép bạn chọn tất cả các cột trong bảng. Nó sẽ chỉ trả về 1 hàng trên mỗi tài khoản ngay cả khi có giá trị 'tối đa' trùng lặp cho điểm số.
Điều này rất hữu ích đối với tôi, vì tôi không tìm được số điểm tối đa (rất dễ làm với hàm max()) nhưng trong thời gian gần đây nhất điểm được nhập cho một tài khoản.
Nguồn
2009-07-23 04:04:09
chúng tôi đang làm bài tập về nhà của bạn? – paulwhit
Bài tập về nhà hay không, câu hỏi là IMHO tốt, vì DISTINCT đơn giản sẽ không hoạt động và cần kết hợp nó với hàm tổng hợp - một vấn đề tôi cũng gặp phải vài lần và có giải pháp trên SO sẽ mang lại lợi ích cho tất cả chúng ta. –