MySql - 将字符串值排在前面进行排序

7

我有一个名为Foobar的表格,它看起来像这样:

+----+-------------+
| ID | Description |
+----+-------------+
| 12 | aab         |
+----+-------------+
| 13 | fff         |
+----+-------------+
| 14 | fff         |
+----+-------------+
| 15 | xab         |
+----+-------------+

我希望的是按顺序打印出所有的描述。 但首先我想让值“fff”位于顶部。 换句话说,输出应该如下:fff,fff,aab,xab。
因此,简单的“SELECT foobar.description FROM foobar ORDER BY foobar.description ASC”将无法工作。
3个回答

18

在MySQL中,这个可以正常工作。

SELECT foobar.description 
FROM foobar 
ORDER BY foobar.description <> 'fff',
         foobar.description ASC

但通常你也可以使用一个 case

SELECT foobar.description 
FROM foobar 
ORDER BY case when foobar.description = 'fff' then 1 else 2 end,
         foobar.description ASC

1
查询优化器可能不会在两者之间有任何区别。这只是语法问题。第一个查询语法仅适用于MySQL。后者适用于所有数据库引擎,更具可移植性。但性能没有区别。 - juergen d

2
select foobar.description from foobar
order by case when foobar.description = 'fff' then 1 else 2 end,
foobar.description asc 

1

试试这个:

SELECT description
FROM foobar
ORDER BY description != 'fff', description

这是因为在mysql中,true为1,false为0。
我还从查询中删除了所有不必要的字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接