как найти максимальное значение в таблице mysql

У меня есть таблица mysql, т.е.

 st_id |  имя |  электронная почта |  математика |  химия |  био |  социальное исследование
 1 |  john |@a.com |  20 |  23 |  10 |  15 

мой вопрос в том, как я могу найти самую высокую оценку предмета, вторую последнюю и так далее
Обратите внимание, что все поля subject имеют значения int (11)

Разбейте базу данных на 3 таблицы:

Студенты:

st_id | name | email 1 | john |@a.com 

Курсы:

 cr_id | name 1 | maths 2 | chemistry 3 | bio 4 | social_studies 

StudentCourses:

 st_id | cr_id | score 1 | 1 | 20 1 | 2 | 23 1 | 3 | 10 1 | 4 | 15 

Теперь вы можете сделать:

SELECT s.name, MAX(sc.score) FROM Students s INNER JOIN StudentCourses sc ON s.st_id = sc.st_id;

 SELECT * FROM <table> ORDER BY <field> DESC LIMIT <needed number of rows> 

Пример:

 SELECT * FROM <table> ORDER BY maths+chemistry+bio+social_study DESC LIMIT 3 

Строго PHP-метод: я предполагаю, что вы хотите поддерживать связь с именами полей. В этом случае просто используйте asort($row); в каждой строке результата запроса, предполагая, что вы выбрали строку как массив. asort будет сортировать массив от наименьшего значения до самого высокого (с дополнительными флагами, чтобы при необходимости asort результаты) при сохранении ключей. Затем цикл foreach позволяет вам работать с каждой парой ключ / значение в отсортированном порядке.

 st_id | name | email | maths | chemistry | bio | social_study 1 | john |@a.com | 20 | 23 | 10 | 15 

Запрос может быть для верхних знаков

 SELECT id,GREATEST(mark,mark1,mark2) AS `top` FROM `students`