2010-11-16 5 views
0

J'ai un modèle Pupil, qui a obtenu le champ score. Je dois faire une liste avec la règle étrange: l'ordre par le score (Asc) mais toutes les partitions que plus de 100 devraient commandés à zéro (!):Commande spécifique (sql)

Pupil.all(:order => 'score DESC' ...?) 
100 
86 
34 
21 
6 
3 
1 
0 
143 
125 
354 
0 
456 
0 
0 

je peux le commander en utilisant Ruby, mais je dois sql

Aslo Je peux créer champ supplémentaire dans db pour stocker des données comme
new_score = score > 100 ? 0 : score
mais je pense que nous pouvons faire sql sans elle

+0

Quelle base de données utilisez-vous? –

+0

MySQL, sqlite3. – fl00r

Répondre

4

que vous pouvez faire pour par « score> 100 » (commander les booléens) , puis commandez par But. Tous ceux qui ont un score> 100 seront pré-commandés par le booléen, et la sous-commande ordonnera les autres scores après les> 100.

J'espère que cela était assez clair et ce que vous recherchez :)

+0

génial! merci – fl00r

+3

Sachez simplement que dans chaque base de données, le tri des booléens peut être différent. Vous pouvez être plus sûr si vous écrivez un full: 'ORDER BY CASE WHEN score> 100 ALORS score ELSE 0 END' (si votre base de données le comprend) – Arsen7

4

SELECT * FROM ordre élève par le score> 100, le score desc