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}}
答案 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