0

这是这个问题的sqlfiddle

我有一个类似的学生表

student_id | first_name | doing_well
-----------+------------+-----------
1          | John       | NULL
2          | Jane       | NULL
3          | Steve      | 0
4          | Sue        | 1
5          | James      | 0

我想做的是根据doing_well领域对学生进行排序。成绩好的学生1排在最前面,成绩不好的学生排0在最后,成绩不详的学生排NULL在中间。

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

SELECT
  *
FROM
  students
ORDER BY
  FIELD(doing_well,'0',NULL,'1')

我真的很想做到这一点并将未定义保留为NULL,而不必将未定义更改为值。

最终结果应该是这样的

4  | Sue   | 1
1  | John  | NULL
2  | Jane  | NULL
3  | Steve | 0
5  | James | 0

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

4

2 回答 2

6
order by 
    case 
      when doing_well = 1 then 0
      when doing_well is null then 1
      else 2
    end;
于 2013-08-05T20:40:01.413 回答
4

你也可以这样做

    ORDER BY
    IFNULL(doing_well, 0.5) desc

演示

于 2013-08-05T20:44:32.853 回答