Le ORDER BY
le plus à gauche les éléments ne peuvent pas être en désaccord avec les éléments du DISTINCT
clause. Je cite le manuel sur DISTINCT
:
Essayez :
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;
Ou utilisez 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;
Si c.cluster_id, feed_id
sont les colonnes de clé primaire de toutes les tables (les deux dans ce cas) dont vous incluez les colonnes dans le SELECT
list, cela fonctionne uniquement avec PostgreSQL 9.1 ou plus tard.
Sinon, vous devez GROUP BY
le reste des colonnes ou regrouper ou fournir plus d'informations.