我有一个名为data
的表,该表具有2列type
和status
,如下所示:
TYPE STATUS
deposit 1
deposit 1
deposit 2
deposit 3
deposit 0
transfer 1
transfer 2
transfer 3
transfer 0
transfer 1
我需要通过将status
的顺序设置为(1、2、3,然后是0)来对其进行排序,但是当status
为1
时,我需要输入deposit
首先是transfer
类型,对于其余状态,我只需要将它们设置为(2、3,然后是0),而不必注意类型。
使用此查询,我只能找出一半的难题:
select * from data order by FIELD(status, '1', '2', '3', '0')
结果:
TYPE STATUS
deposit 1
transfer 1
transfer 1
deposit 1
deposit 2
transfer 2
deposit 3
deposit 3
transfer 0
deposit 0
所需的结果是:
TYPE STATUS
deposit 1
deposit 1
transfer 1
transfer 1
deposit 2
transfer 2
deposit 3
deposit 3
transfer 0
deposit 0
提前谢谢!
答案 0 :(得分:1)
你不能只是做
select *
from data
order by field(status, '1', '2', '3', '0'), type
答案 1 :(得分:1)
如果您不希望陷入状态值数量发生变化而必须更新的FIELD
表达式中,则可以先按STATUS > 0 DESC
进行排序(这将对所有正数进行排序STATUS
值之前的0
值),然后依次乘STATUS
(将正值排序为1、2、3等),然后乘TYPE
(自{{ 1}}按字母顺序在deposit
之前:
transfer
输出:
SELECT *
FROM data
ORDER BY STATUS > 0 DESC, STATUS, TYPE