2010-11-16 62 views
0

我有一个型号Pupil,其中有score。我需要用奇怪的规则列表:顺序按分数(DESC),但超过100个应责令为零所有得分​​(!):特定订单(sql)

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

我可以使用红宝石订购它,但我需要的sql

ASLO我可以创建数据库附加字段,用于存储像
new_score = score > 100 ? 0 : score
数据,但我认为我们可以让SQL没有它

+0

什么数据库您使用的? – 2010-11-16 10:29:18

+0

MySQL,sqlite3。 – fl00r 2010-11-16 10:30:54

回答

4

你可以做为了“分数> 100”(订购布尔) ,然后按顺序排列得分了。所有得分> 100的人都会被布尔预先排序,并且子顺序会在> 100之后排列其他得分。

我希望这是不够清楚,你是按分数> 100,得分降序寻找:)

+0

太棒了!谢谢 – fl00r 2010-11-16 10:45:09

+3

请注意,在每个数据库中,布尔值的排序可能不同。如果您编写完整的内容,您可能会更安全:'当得分> 100时得到ORDER BY CASE ELSE 0 END'(如果您的数据库了解它) – Arsen7 2010-11-16 11:29:25

4

SELECT * FROM学生为了