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

Приоритет, базиран на времето в заявка за активен запис

За разлика от някои други бази данни (като Oracle), PostgreSQL има напълно функционален boolean Тип. Можете да го използвате директно в ORDER BY клауза без прилагане на CASE изявление - те са чудесни за по-сложни ситуации.

Ред на сортиране за boolean стойности е:

FALSE -> TRUE -> NULL

Ако ORDER BY bool_expression DESC , обръщате реда към:

NULL -> TRUE -> FALSE

Ако искате TRUE първо и NULL накрая, използвайте NULLS LAST клауза на ORDER BY :

ORDER BY (featured AND created_at > now() - interval '11 days') DESC NULLS LAST  
       , created_at DESC

Разбира се, NULLS LAST е подходящ само ако featured или created_at може бъде NULL . Ако колоните са дефинирани NOT NULL , тогава не се притеснявай.

Също така, FALSE ще бъдат сортирани преди NULL . Ако не искате да правите разлика между тези две, вие или се връщате към CASE изявление или можете да въведете NULLIF() или COALESCE() .

ORDER BY NULLIF(featured AND created_at > now() - interval '11 days'), FALSE)
                                                                DESC NULLS LAST
       , created_at DESC

Ефективност

Забележете как използвах:

created_at > now() - interval '11 days'

и не :

now() - created_at < interval '11 days'

В първия пример изразът вдясно е константа, която се изчислява веднъж . След това може да се използва индекс за търсене на съвпадащи редове. Много ефективен.

Последният обикновено не може да се използва с индекс. Трябва да се изчисли стойност за всеки отделен ред, преди да може да бъде проверена спрямо константния израз вдясно. Не правете това, ако можете да го избегнете. Никога!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да картографирате PostgreSQL enum с JPA и Hibernate

  2. Паралелизмът идва до ВАКУУМ

  3. Кой е най-елегантният начин за съхраняване на времеви печат с nanosec в postgresql?

  4. Как да използвате EXECUTE FORMAT ... ИЗПОЛЗВАНЕ във функцията postgres

  5. PostgreSQL броят пъти, когато поднизът се появява в текста