我的表'类别'有两列:'id'和'name'。
我想显示名称并按字母顺序排列表格,但如果名称“其他”存在,我想将其设置为最后一行。
有没有办法实现这一点而不创建另一个标记位置的列?
ORDER BY name DESC { something to set name = "other" to the end }
谢谢!
答案 0 :(得分:3)
使用CASE
,您可以在ORDER BY
中有条件地应用排序。有条件地为name <> 'other'
分配了0
的行,这些行在匹配other
的{{1}}匹配1
之前排序。然后它由name
按次序排序。
ORDER BY
CASE WHEN name <> 'other' THEN 0 ELSE 1 END,
name ASC
您在示例中使用name DESC
,但您的描述暗示您希望按字母顺序升序排序。如果这不正确并且您 希望它降序,请改用name DESC
。
请注意,对于MySQL,布尔表达式(name = 'other')
将计算为0或1.因此可以简化为CASE
:
ORDER BY
/* name <> 'other' returns 0 */
(name = 'other'),
name ASC
但这对任何RDBMS都不可移植。