SELECT s.name, s.mark, g.grade FROM students s, grades g
where g.grade = ( Select grade from grades where s.mark >= min_mark and s.mark <= max_mark)
order by IF(g.grade='F' or g.grade='E' or g.grade='D', (g.grade, s.mark), g.grade)
Это синтаксис mysql, который я пытаюсь, но не позволяю ему работать.
Выбор работает по назначению, но я хочу заказать оценки от A до F и на тех же самых классах. Я хочу заказать метки desc для AC и asc для DF
Надеюсь, что я хочу:
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
Как отметил @Vatev, вы можете использовать условный оператор для изменения сортируемого 2-го значения. Я бы рекомендовал использовать оператор 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
ORDER BY g.grade ASC, IF(g.grade > 'C',-s.mark,s.mark) DESC
может помочь