Pourquoi les valeurs NULL viennent en premier lorsque vous commandez DESC dans une requête PostgreSQL?
quand voudriez-vous que NULLS premier lors de la commande d'une requête descendante ou ascendante?
à mon avis, le vaste majorité du temps le comportement désiré si le Tri ascendant ou descendant serait NULLS dernier. Au lieu de cela, nous devrions d'abord spécifier NULLS.
2 réponses
en fait, avec l'ordre de tri par défaut ( ASCENDING
) les valeurs nulles viennent dernier .
la logique veut que l'ordre de tri soit inversé avec le mot-clé DESCENDING
, donc NULLs viennent premier dans ce cas.
mais la meilleure partie vient en dernier: vous pouvez choisir de quelle manière vous le voulez:
citant le courant manuel , version 9.3 en date de l'écriture:
si
NULLS LAST
est spécifié, les valeurs nulles trient après tout non null valeurs; siNULLS FIRST
est spécifié, les valeurs nulles se trient avant toutes les valeurs non null. Si aucune n'est spécifiée, le comportement par défaut estNULLS LAST
lorsqueASC
est spécifié ou implicite , etNULLS FIRST
lorsqueDESC
est spécifié (donc, la valeur par défaut est d'agir comme si les nulls sont plus grands que les non-nuls). LorsqueUSING
est spécifié, la valeur par défaut annule la commande dépend de l'opérateur est inférieur ou supérieur à l'opérateur.
le Gras c'est moi qui souligne.
La réponse est simple, parce que les personnes qui ont écrit Postgres. pour citer :
la valeur nulle trie plus haut que n'importe quelle autre valeur. En d'autres termes, avec l'ordre croissant de tri, les valeurs nulles trient à la fin, et avec l'ordre décroissant de tri, les valeurs nulles trient au début.
cela suppose que vous avez spécifié une commande par clause, si vous n'avez pas alors les lignes sont retourné au hasard.
si L'ordre Par clause est spécifié, les lignes retournées sont triées dans l'ordre spécifié. Si L'ordre par n'est pas donné, les lignes sont retournées dans l'ordre que le système trouve le plus rapide à produire.