8
votes

Commander par null d'abord, puis commandez par autre variable

Ceci est mon code pour l'instant: xxx

mais je veux qu'il ressemble à: xxx

Ce que je veux faire est avoir tous numéro null en haut du résultat, mais dès que le numéro n'est pas null , Trier par ID

est-ce possible?

J'utilise mysql.


0 commentaires

3 Réponses :


20
votes

Qu'en est-il de quelque chose comme ceci:

SELECT id, number
FROM Media
WHERE user = 10
ORDER BY (case when number is null then 0 else 1 end), id
  • Numéro NULL; id = 1 li>
  • Numéro NULL; id = 2 li>
  • Numéro NULL; id = 5 li>
  • Numéro NULL; id = 8 li>
  • Numéro non nul; id = 3 li>
  • Numéro non nul; id = 4 li>
  • Numéro non nul; id = 7 li>
  • Numéro non nul; id = 10 li>
  • Numéro non nul; id = 12 li> ul> p>


2 commentaires

C'est comme ça que je le fais normalement aussi.


Excellent! Réponse rapide, et cela a fonctionné pour la première fois que j'ai essayé. Merci!



-1
votes

Union pourrait également être utilisé.

SELECT id, number
FROM Media
WHERE user = 10 AND number IS NULL
ORDER BY id

UNION

SELECT id, number
FROM Media
WHERE user = 10 AND number IS NOT NULL
ORDER BY id, number;


1 commentaires

Outre une syntaxe légèrement incorrecte (parenthèses manquantes), cela n'aura pas de sens car le Union ne garantira pas la préservation de la commande de Selectes individuelles. En outre, cela produit un plan d'exécution inutilement coûteux (deux null sur la colonne numéro ).



1
votes

La fonction ISNULL () renvoie 1 si le paramètre est null et 0 sinon. xxx

Mind You, terrible pour la performance en fonction du nombre de valeurs qu'il doit commander: aucun index ne sera utilisé en fonction de la commande par colonnes.


0 commentaires