PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uporządkować różne krotki w zapytaniu PostgreSQL

Skrajny lewy ORDER BY elementy nie mogą się nie zgadzać z elementami DISTINCT klauzula. Cytuję podręcznik o DISTINCT :

Wypróbuj:

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;

Lub użyj 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;

Jeśli c.cluster_id, feed_id są kolumnami klucza podstawowego wszystkich (w tym przypadku obu) tabel, z których uwzględniasz kolumny w SELECT listy, to działa tylko z PostgreSQL 9.1 lub później.

W przeciwnym razie musisz GRUPAĆ WG pozostałe kolumny lub agregują lub dostarczają więcej informacji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usuń funkcjonalność za pomocą ramki danych Spark sql

  2. Używanie Barmana do odzyskiwania po awarii PostgreSQL

  3. Czy możesz utworzyć sekwencję na kolumnie, która już istnieje w Postgresie?

  4. SQL Znajdź wszystkich bezpośrednich potomków w drzewie

  5. Początkowa tablica w funkcji agregacji tablicy wielowymiarowej