El ORDER BY
más a la izquierda los elementos no pueden estar en desacuerdo con los elementos del DISTINCT
cláusula. Cito el manual sobre DISTINCT
:
Prueba:
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;
O use 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
son las columnas de clave principal de todas las tablas (ambas en este caso) de las que incluye columnas en el SELECT
lista, entonces esto solo funciona con PostgreSQL 9.1 o posterior.
De lo contrario, debe GROUP BY
el resto de las columnas o agregar o proporcionar más información.