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

ORDER BY kolom yang terkadang kosong menggunakan Active Record &Rails

Anda mengalami masalah huruf besar:Nama Anda semua ditulis dengan huruf besar, tetapi emailnya menggunakan huruf kecil, dan dengan sebagian besar susunan, huruf besar ada sebelum huruf kecil. Lihat contoh sepele ini:

#= select * from (values ('b'), ('B'), ('a'), ('A')) t (letter);
 letter
--------
 b
 B
 a
 A
#= select * from (values ('b'), ('B'), ('a'), ('A')) t (letter) order by letter;
 letter
--------
 A
 B
 a
 b

Jadi kueri Anda sebenarnya berfungsi dengan baik, hanya saja [email protected] urutkan setelah Josh . Untuk menghindari hal ini, Anda dapat mengurutkan berdasarkan nilai huruf kecil. Berikut adalah versi sederhana dari data yang Anda miliki:

#= select * from volunteers;
 first_name | last_name |       email
------------+-----------+--------------------
 Josh       | Broger    | [email protected]
 Josh       | Kenton    | [email protected]
 ∅          | ∅         | [email protected]
 Josh       | Broger    | [email protected]
 Alex       | Diego     | [email protected]

Kemudian untuk mengurutkan menggunakan coalesce Anda mengejar:

#= select * from volunteers order by lower(coalesce(first_name, email));
 first_name | last_name |       email
------------+-----------+--------------------
 Alex       | Diego     | [email protected]
 ∅          | ∅         | [email protected]
 Josh       | Broger    | [email protected]
 Josh       | Broger    | [email protected]
 Josh       | Kenton    | [email protected]

Atau untuk versi lengkap Anda menggunakan ActiveRecord :

Volunteer
  .joins(:volunteer_lists)
  .where(
    "(volunteer_lists.organizer_id = ? AND organizer_type = 'Organization') OR (volunteer_lists.organizer_id IN (?) AND organizer_type = 'Collaborative')",
    organization.id, collaboratives
  )
  .order('LOWER(COALESCE("volunteers"."first_name", "volunteers"."last_name", "volunteers"."email"))')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kebuntuan di postgres pada permintaan pembaruan sederhana

  2. Kesalahan hibernasi:transaksi saat ini dibatalkan, perintah diabaikan hingga akhir blok transaksi

  3. Simpan interval waktu di PostgreSQL dari Rails

  4. Menggunakan pg_notify dalam fungsi pemicu PostgreSQL

  5. Django+Postgres:transaksi saat ini dibatalkan, perintah diabaikan hingga akhir blok transaksi