如何在MySQL中间使用NULL进行排序

ama*_*ter 0 mysql null

这是这个问题的sqlfiddle.

我有一张类似的学生桌

student_id | first_name | doing_well
-----------+------------+-----------
1          | John       | NULL
2          | Jane       | NULL
3          | Steve      | 0
4          | Sue        | 1
5          | James      | 0
Run Code Online (Sandbox Code Playgroud)

我想要做的是根据doing_well田地命令学生.表现良好的学生1应该排在最前面,表现不佳的学生应该排在最前面,而表现不佳0的学生NULL应该处于中间位置.

我尝试过使用但ORDER BY FIELD()没有成功

SELECT
  *
FROM
  students
ORDER BY
  FIELD(doing_well,'0',NULL,'1')
Run Code Online (Sandbox Code Playgroud)

我真的想完成这个并保持未定义NULL,而不必将undefined 更改为值.

最终结果应该是这样的

4  | Sue   | 1
1  | John  | NULL
2  | Jane  | NULL
3  | Steve | 0
5  | James | 0
Run Code Online (Sandbox Code Playgroud)

或者,可以使用PHP在查询之后进行排序的Answers是受欢迎的但不是首选的.

a_h*_*ame 6

order by 
    case 
      when doing_well = 1 then 0
      when doing_well is null then 1
      else 2
    end;
Run Code Online (Sandbox Code Playgroud)