Lors du tri par champ date/heure par ordre croissant dans une table PostgreSQL, les valeurs NULL doivent être prioritaires. De plus, les enregistrements last_updated non nuls doivent être triés par ordre croissant immédiatement après les valeurs NULL.
L'expression ORDER BY
de PostgreSQL fournit le modificateur NULLS FIRST | LAST
pour gérer cette situation. En précisant NULLS FIRST
, les enregistrements avec une valeur NULL pour le champ last_updated apparaîtront avant les enregistrements non NULL :
... ORDER BY last_updated NULLS FIRST
Cependant, l'utilisation de NULLS FIRST
avec le tri décroissant (DESC) renvoie le résultat opposé, les valeurs NULL apparaîtront en dernier. Pour mettre les valeurs NULL en dernier dans l'ordre décroissant, utilisez NULLS LAST
:
... ORDER BY last_updated DESC NULLS LAST
Pour utiliser un index avec l'ordre de tri modifié, il doit correspondre à la définition de l'index :
CREATE INDEX foo_idx ON tbl (last_updated DESC NULLS LAST);
Bien que PostgreSQL puisse lire les index btree à l'envers, il est plus efficace de créer un index qui correspond à l'ordre de tri :
CREATE INDEX foo_idx ON tbl (last_updated);
La position des valeurs NULL dans la liste annexée affecte les performances des requêtes. Pour plus d’informations, consultez Impact sur les performances des vues sur les fonctions d’agrégation et limitations des jeux de résultats.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!