如何使用" ORDER BY FIELD"排序SQL

时间:2018-06-18 03:00:11

标签: mysql sql sql-order-by field

如果有如下所示的数据;

id  cnt_stamp    
1  999 
2  3
3  9
4  3 
5  1000
6  30

如果输入是这个顺序的(4,1,2,3),我只想得到(3,999,3,9)。 为此,我创建了一个SQL

SELECT `cnt_stamp`
FROM `stm_events`
ORDER BY FIELD(`id`, 4, 1, 2, 3);

但它返回(1000,30,3,999,3,9)。我应该如何修复我的SQL以实现我的目标?感谢您抽出宝贵时间。

2 个答案:

答案 0 :(得分:2)

39 \ 87 / \ 47 92 \ \ 67 97 / \ \ 62 72 99 / 56 会将FIELD分配给任何不匹配的NULL,并且默认情况下会在MySQL中排序。如果您不想查看非匹配项,则可以添加id子句:

WHERE

如果您希望查看所有数据,并在结尾处使用不匹配的SELECT cnt_stamp FROM stm_events WHERE id IN (1, 2, 3, 4) ORDER BY FIELD(id, 4, 1, 2, 3); 值,请反转字段列表的顺序并按降序排序:

id

Demo

答案 1 :(得分:1)

使用COALESCE功能:

SELECT `cnt_stamp` 
  FROM `stm_events` 
 ORDER BY COALESCE(`id`,FIELD(`id`,4,1,2,3));

SQL Fiddle Demo