PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

ORDER BY колони, които понякога са празни с помощта на Active Record &Rails

Сблъсквате се с проблем с главни букви:всичките ви имена са с главни букви, но имейлите са с малки букви и при повечето съпоставки главните букви идват преди малките. Вижте този тривиален пример:

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

Така че вашата заявка всъщност работи перфектно, просто [email protected] сортира след Josh . За да избегнете това, можете да сортирате по стойността с малки букви. Ето една проста версия на данните, които имате:

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

След това да сортирате с помощта на coalesce преследвате:

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

Или за вашата пълна версия с помощта на 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. plpgsql:извикване на функция с 2 OUT параметъра

  2. PostgreSQL - Удостоверяването на паролата е неуспешно след добавяне на групови роли

  3. Търсене на модел в даден ценови диапазон в различни валути

  4. използване на пролетни профили за зареждане с контекстен атрибут на набор от промени на liquibase за управление на обхвата на набор от промени

  5. Postgresql - избиране на наблюдения и поставяне на нова таблица