sql >> Database teknologi >  >> RDS >> PostgreSQL

ORDER BY kolonner, der nogle gange er tomme ved hjælp af Active Record &Rails

Du støder på et problem med store bogstaver:Dine navne er alle med store bogstaver, men e-mails er små, og med de fleste sorteringer kommer store bogstaver før små bogstaver. Tjek dette trivielle eksempel:

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

Så din forespørgsel fungerer faktisk perfekt, det er bare det [email protected] sorterer efter Josh . For at undgå dette kan du sortere efter små bogstaver. Her er en simpel version af de data, du har:

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

Derefter sorteres ved hjælp af coalesce du leder efter:

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

Eller for din fulde version ved hjælp af 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. Er et RID-opslag hurtigere end et nøgleopslag?

  2. Fejl under adgang til EntityManager - openjpa - WAS liberty-profil

  3. MediumBlob i Laravel-databaseskema

  4. Er det muligt at udstede en VACUUM ANALYZE <tablename> fra psycopg2 eller sqlalchemy til PostgreSQL?