порядок mysql по нескольким столбцам с if

0
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
  • 1
    Не уверен, что у меня есть идея, но ORDER BY g.grade ASC, IF(g.grade > 'C',-s.mark,s.mark) DESC может помочь
  • 0
    да, это сделал: P спасибо
Теги:

1 ответ

0

Как отметил @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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню