mysql按if按多列排序

时间:2018-08-09 14:55:30

标签: mysql

name            grade     mark
Ewan Black         A      100
Ryan Richards      B      90
Drake Porter       C      78
Jamie Miller       C      76
NULL               D      67
NULL               F      43
NULL               F      54

这是我正在尝试但无法正常运行的mysql语法。

select按预期工作,但是我想从A到F排序等级,在相同的等级上我想对A-C标记desc,对D-F标记asc

希望我很清楚:

{{1}}

1 个答案:

答案 0 :(得分:0)

正如@Vatev所指出的,您可以使用条件语句来更改要排序的第二个值。我建议使用CASE语句,因为它更符合SQL标准。另外,我建议您使用标准的JOIN语法,而不要使用旧式(超过20年)的联接。另外,您不需要子查询。像这样:

select
    students.name
    ,grades.grade
    ,students.mark
from students
    inner join grades on
        students.mark between grades.min_mark and grades.max_mark
order by
    grades.grade
    ,case
        when grades.grade in ('D', 'E', 'F')
            then students.mark
        else
            100 - students.mark
    end