我有一列状态,并且,根据查询,我想按特定状态的结果排序,然后按id(Asc或Desc,取决于)排序。例如,我可能希望显示状态为“HI”的所有行,按ID desc排序,然后显示所有其他行,按id desc排序。
我希望我能在一个查询中执行此操作,而不是获得所有我喜欢的状态结果,然后完成剩下的工作。我可以吗?
答案 0 :(得分:1)
您有两种选择:
在第一种情况下,您可以执行类似
的操作select 1 as res_order, ...
...
where state like 'hi%'
union
select 2 as res_order, ...
...
where state not like 'hi%'
order by res_order asc, id desc
在第二种情况下,您可以执行类似
的操作select my_function(state, "hi") as row_order, ...
...
order by row_order
其中函数返回匹配状态的较低值。
代码不在我的脑海中:可能需要进行一些调整以使其可以运行。
答案 1 :(得分:1)
怎么样:
SELECT id, state
FROM sometable
ORDER BY IF(state = 'HI', 0, 1) ASC, id DESC;
这将首先排序'HI'行。如果你想要它们,请将ASC更改为DESC。