是不可能的排序查询由两个不同的ORDER BY子句。
您可以通过此行添加一个或多个其他行的声明和秩序。 要做到这一点,你必须决定如何排序。在所有等级> 10之前,小于10分的成绩是否应该达到?
像这样的东西可以工作:
select (
case
when grade < 8 then null
else name
end
) as name,
grade, marks,
(
case
when grade > 10 then grade
else null
end
) as sortorder1,
(
case
when grade > 10 then name
else marks
end
) as sortorder2
from students
join Grades
ON Min_mark = (SELECT MAX(Min_mark) from grades where min_mark <= students.marks)
order by sortorder1 desc, sortorder2 asc
编辑低于8 assumning等级应由档次以及排序:
我认为这应该工作:
select (
case
when grade < 8 then null
else name
end
) as displayname,
grade, marks
from students
join Grades
ON Min_mark = (SELECT MAX(Min_mark) from grades where min_mark <= students.marks)
order by grade desc, displayname asc, marks asc
我将'as name'替换为'as displayname'以便更清楚地表明,排序应该通过displayname完成,我不确定这是否对于数据库来说是需要的,但是对于阅读查询的人来说更加清楚。