PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara memesan tupel berbeda dalam kueri PostgreSQL

ORDER BY paling kiri item tidak boleh tidak setuju dengan item DISTINCT ayat. Saya mengutip manual tentang DISTINCT :

Coba:

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;

Atau gunakan 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;

Jika c.cluster_id, feed_id adalah kolom kunci utama dari semua (keduanya dalam hal ini) tabel yang Anda sertakan kolom dari dalam SELECT list, maka ini hanya berfungsi dengan PostgreSQL 9.1 atau lambat.

Jika tidak, Anda perlu GROUP BY sisa kolom atau agregat atau memberikan informasi lebih lanjut.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tipe data Postgres ENUM atau CHECK CONSTRAINT?

  2. Mengelola Ketersediaan Tinggi PostgreSQL – Bagian I:Kegagalan Otomatis PostgreSQL

  3. Hibernate optimis mengunci perilaku yang berbeda antara Postgres dan MariaDb

  4. Jalankan skrip setelah titik masuk kontainer di docker-compose

  5. Apa yang menyebabkan More tidak dikenali... kesalahan saat menjalankan Postgresql 11 pada mesin Windows?