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

Permintaan untuk ORDER BY jumlah baris yang dikembalikan dari SELECT lain

Cara Postgres untuk melakukan ini:

SELECT *
FROM   users u
LEFT   JOIN (
   SELECT user_id, count(*) AS friends
   FROM   friends
   ) f USING (user_id)
ORDER  BY f.friends DESC NULLS LAST, user_id  -- as tiebreaker
  • Kata kunci AS hanyalah noise untuk alias tabel. Tapi jangan menghilangkannya dari alias kolom. Panduan tentang "Menghilangkan Kata Kunci AS":

    Dalam FROM item, baik standar dan PostgreSQL mengizinkan AS untuk dihilangkan sebelum alias yang merupakan kata kunci tanpa syarat. Tapi ini tidak praktis untuk nama kolom keluaran, karena ambiguitas sintaksis .

    Penekanan saya yang berani.

  • ISNULL() adalah ekstensi kustom MySQL atau SQL Server. Postgres menggunakan fungsi standar SQL COALESCE() . Tetapi Anda tidak perlu keduanya di sini. Gunakan NULLS LAST klausa sebagai gantinya, yang lebih cepat dan lebih bersih. Lihat:

    • Urutkan PostgreSQL berdasarkan datetime asc, null dulu?
  • Beberapa pengguna akan memiliki jumlah teman yang sama. Rekan-rekan ini akan diurutkan secara sewenang-wenang. Eksekusi berulang mungkin menghasilkan urutan pengurutan yang berbeda, yang biasanya tidak diinginkan. Tambahkan lebih banyak ekspresi ke ORDER BY sebagai pemutus ikatan. Pada akhirnya, kunci utama menyelesaikan ambiguitas yang tersisa.

  • Jika kedua tabel memiliki nama kolom yang sama user_id (seperti yang seharusnya) Anda dapat menggunakan pintasan sintaks USING dalam klausa gabung. Fitur SQL standar lainnya. Efek samping sambutan:user_id hanya terdaftar sekali dalam output untuk SELECT * , berbeda dengan saat bergabung dengan ON . Banyak klien bahkan tidak mau menerima nama kolom duplikat dalam output.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ubah semua catatan di postgres ke Titlecase, huruf besar pertama

  2. pg_dump database postgres dari server jauh ketika port 5432 diblokir

  3. Kesalahan intarray postgresql:simbol tidak terdefinisi:pfree

  4. Tidak dapat menggunakan tabel bernama pengguna di postgresql hibernate

  5. Bagaimana cara mendapatkan min, median, dan maks dari kueri saya di postgresql?