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.

9
demandé sur Erwin Brandstetter 2014-01-07 00:28:46

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; si NULLS 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 est NULLS LAST lorsque ASC est spécifié ou implicite , et NULLS FIRST lorsque DESC est spécifié (donc, la valeur par défaut est d'agir comme si les nulls sont plus grands que les non-nuls). Lorsque USING 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.

16
répondu Erwin Brandstetter 2017-05-23 12:32:29

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.

1
répondu Ben 2014-01-06 20:36:01