ĐẶT HÀNG THEO
ngoài cùng bên trái các mục không thể trái với các mục của DISTINCT
mệnh đề. Tôi trích dẫn hướng dẫn về DISTINCT
:
Hãy thử:
SELECT *
FROM (
SELECT DISTINCT ON (c.cluster_id, feed_id)
c.cluster_id, num_docs, feed_id, url_time
FROM url_info u
JOIN cluster_info c ON (c.cluster_id = u.cluster_id)
WHERE feed_id IN (SELECT pot_seeder FROM potentials)
AND num_docs > 5
AND url_time > '2012-04-16'
ORDER BY c.cluster_id, feed_id, num_docs, url_time
-- first columns match DISTINCT
-- the rest to pick certain values for dupes
-- or did you want to pick random values for dupes?
) x
ORDER BY num_docs DESC;
Hoặc sử dụng GROUP BY
:
SELECT c.cluster_id
, num_docs
, feed_id
, url_time
FROM url_info u
JOIN cluster_info c ON (c.cluster_id = u.cluster_id)
WHERE feed_id IN (SELECT pot_seeder FROM potentials)
AND num_docs > 5
AND url_time > '2012-04-16'
GROUP BY c.cluster_id, feed_id
ORDER BY num_docs DESC;
Nếu c.cluster_id, feed_id
là các cột khóa chính của tất cả (cả trong trường hợp này) bảng mà bạn bao gồm các cột từ trong SELECT
danh sách, sau đó điều này chỉ hoạt động với PostgreSQL 9.1 trở lên.
Nếu không, bạn cần GROUP BY
phần còn lại của các cột hoặc tổng hợp hoặc cung cấp thêm thông tin.