PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

ĐẶT HÀNG THEO các cột đôi khi trống bằng Active Record &Rails

Bạn đang gặp phải một vấn đề về chữ hoa:Tên của bạn đều được viết hoa, nhưng các email là chữ thường và với hầu hết các ảnh ghép, chữ hoa đứng trước chữ thường. Hãy xem ví dụ nhỏ này:

#= 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

Vì vậy, truy vấn của bạn thực sự hoạt động hoàn hảo, chỉ là [email protected] sắp xếp sau Josh . Để tránh điều này, bạn có thể sắp xếp theo giá trị chữ thường. Đây là phiên bản đơn giản của dữ liệu bạn có:

#= 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]

Sau đó, để sắp xếp bằng cách sử dụng coalesce bạn đang theo đuổi:

#= 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]

Hoặc đối với phiên bản đầy đủ của bạn bằng cách sử dụng 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. cột users.id phải xuất hiện trong mệnh đề GROUP BY hoặc được sử dụng trong một hàm tổng hợp

  2. danh sách Postgres loại ENUM

  3. Oracle Cast và MULTISET có sẵn trong POSTGRES

  4. Làm thế nào để sắp xếp lại các mục trong danh sách cho phù hợp với một mẫu nhất định?

  5. Lỗi postgres trong chèn hàng loạt:quan hệ hibernate_sequence không tồn tại vị trí 17