Ganz links ORDER BY
Elemente können nicht mit den Elementen des DISTINCT
übereinstimmen Klausel. Ich zitiere das Handbuch zu DISTINCT
:
Versuchen Sie:
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;
Oder verwenden Sie 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;
Wenn c.cluster_id, feed_id
sind die Primärschlüsselspalten aller (in diesem Fall beider) Tabellen, aus denen Sie Spalten in SELECT
einschließen list, dann funktioniert das nur mit PostgreSQL 9.1 oder später.
Andernfalls müssen Sie GROUP BY
verwenden die restlichen Spalten oder aggregieren oder weitere Informationen bereitstellen.