6
votes

Réorganiser l'entier sauf la valeur 0 avec SQL

J'essaie d'obtenir une liste ordonnée de lignes de ma table de base de données MySQL en fonction d'une valeur entière "Place".

name place
---- -----
John 1
Do   2
Pete 2
Eric 0


0 commentaires

3 Réponses :


6
votes
order by case when place = 0 then 1 else 0 end asc, place asc
that way you get all the non-zeroes ordered first.

1 commentaires

Jamais vu la construction de cas auparavant (mais alors, j'ai obtenu mes cours SQL au début des années quatre-vingt-dix). En raison de la simplicité, je préfère le @True doux.



2
votes
   ORDER BY CASE place WHEN 0 THEN 0 ELSE -1 END, place

1 commentaires

Merci, les trucs de 9999 étaient quelque chose que j'ai pensé à moi-même, je ne savais tout simplement pas que vous pourriez modifier les critères de tri évalués de l'ordre. Si une liste de commandes en double aurait une pénalité de performance élevée, ce serait mon premier choix suivant.



4
votes
SELECT *
FROM myTable
ORDER BY place>0 DESC, place
is a solution without CASE

2 commentaires

J'aime cette solution comme il est petit et semble bien. À moins que ce soit moins efficace, je garde cela accepté.


ou juste commander par lieu = 0, place