0

'id'と'name'の2つの列を持つテーブル'category'があります。

名前を表示して表をアルファベット順に並べたいのですが、「other」という名前が存在する場合は、それを最後の行に設定したいと思います。

位置をマークする別の列を作成せずにこれを達成する方法はありますか?

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

ありがとう!

4

1 に答える 1

3

を使用するCASEと、で条件付きで順序付けを適用できますORDER BYname <> 'other'条件付きで割り当てられた行は、が割り当てられた0一致する行よりも先にソート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にも移植できません。

于 2012-11-18T21:25:11.527 に答える