我的表“类别”有两列:“id”和“name”。
我想显示名称并按字母顺序排列表格,但如果存在名称“其他”,我想将其设置为最后一行。
有没有办法在不创建另一个标记位置的列的情况下实现这一点?
ORDER BY name DESC { something to set name = "other" to the end }
谢谢!
我的表“类别”有两列:“id”和“name”。
我想显示名称并按字母顺序排列表格,但如果存在名称“其他”,我想将其设置为最后一行。
有没有办法在不创建另一个标记位置的列的情况下实现这一点?
ORDER BY name DESC { something to set name = "other" to the end }
谢谢!
使用CASE
,您可以有条件地在 中应用排序ORDER BY
。name <> 'other'
有条件地分配 a 的行排在分配了 a0
的匹配之前。然后它由 子排序。other
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。