sql >> Databáze >  >> RDS >> PostgreSQL

Jak objednat odlišné n-tice v dotazu PostgreSQL

ORDER BY zcela vlevo položky nemohou nesouhlasit s položkami DISTINCT doložka. Cituji příručku o DISTINCT :

Zkuste:

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;

Nebo použijte 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;

Pokud c.cluster_id, feed_id jsou sloupce primárního klíče všech (v tomto případě obou) tabulek, ze kterých zahrnete sloupce do SELECT seznam, pak to funguje pouze s PostgreSQL 9.1 nebo později.

Jinak musíte GROUP BY zbytek sloupců nebo agregaci nebo poskytnutí dalších informací.




  1. Jak se dotazovat na hodnoty z xml uzlů?

  2. Chyba při odesílání paketu QUERY

  3. Ecto dotaz – data + intervaly Postgres + interpolace dotazu

  4. Jak pomocí funkce okna určit, kdy provést různé úkoly v Hive nebo Postgres?