0

我的表“类别”有两列:“id”和“name”。

我想显示名称并按字母顺序排列表格,但如果存在名称“其他”,我想将其设置为最后一行。

有没有办法在不创建另一个标记位置的列的情况下实现这一点?

ORDER BY name DESC { something to set name = "other" to the end }

谢谢!

4

1 回答 1

3

使用CASE,您可以有条件地在 中应用排序ORDER BYname <> 'other'有条件地分配 a 的行排在分配了 a0的匹配之前。然后它由 子排序。other1name

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。

于 2012-11-18T21:25:11.527 回答