mysql SQL:首先是特定项,然后对其余项进行排序

ufk*_*ufk 73 mysql sql

可以说我有下表.

我希望得到所有朋友,但我希望id 5成为列表中的第一项.我不关心我收到其余项目的顺序.

所需的查询结果将是:

friends
-------

id    name

5     nahum
1     moshe
2     haim
3     yusuf
4     gedalia
6     dana
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

使用Mysql 5.1.x.

谢谢!

Ric*_*iwi 134

select id,name 
from friends 
order by id=5 desc
Run Code Online (Sandbox Code Playgroud)

(假设您不关心其余的顺序,否则,例如通过id asc休息)

select id,name 
from friends 
order by id=5 desc, id asc
Run Code Online (Sandbox Code Playgroud)

  • @ maxx777这个问题标记为MySQL,现在由Oracle拥有.不是"sql-server",就像在Microsoft SQL Server中一样. (10认同)
  • @ maxx777这就是为什么我们有标签和单独的问题.它对提问者的MySQL问题起作用了.如果你想要SQL Server 2005,那么另一个答案就是它,没有必要评论这个答案显然不适用于它从未宣传过的工作. (8认同)

Dum*_*dan 46

试试这个:

select id,name 
from friends 
order by case when id=5 then -1 else id end
Run Code Online (Sandbox Code Playgroud)

如果你有一个以上你可以做的:

select id,name 
from friends 
order by case when id in (5,15,25) then -1 else id end,id
Run Code Online (Sandbox Code Playgroud)

  • +1用于提供在大多数dbms中执行的代码. (4认同)

Ama*_*dan 5

我现在无法访问 MySQL 进行测试,因此它可能会被颠倒...但是您可以使用布尔值也可以排序的事实,并且您可以有多个排序字段。

SELECT ... ORDER BY id != 5, id
Run Code Online (Sandbox Code Playgroud)

(你可能必须写id = 5,我不记得 TRUE 是在 FALSE 之前还是之后排序。)

编辑:哦,我刚刚读到您不关心其余部分的顺序,在这种情况下,我衷心推荐@Richard 的答案。

  • 我更喜欢 `id=5 desc`,因为当列包含空值时,`!=5` 将空值放在前面 (3认同)

Jef*_*Neo 5

您可以field()在 MySQL 中使用。

select id,name from friends order by field(id,5,id)
Run Code Online (Sandbox Code Playgroud)

field() 中的第一个参数表示要排序的字段,其余的就是排序。

所以 5 将首先排序,其余的从 id 开始排序(没有 5)。你可以这样做field(id,5,1,3,id)如果你想让 5、1、3 位于前面,

5 最后可以选择排序方式field(id,id,5)。第二个 id 也将排除 5。