#mysql
#mysql
Вопрос:
Я пытаюсь отобразить строку из таблицы, в которой два условия: 1) Учащийся с самым высоким средним баллом 2) Дата подачи заявки до ГГГГ-ММ-ДД.
Причина, по которой я не использовал * для выбора, заключается в том, что есть некоторые столбцы, которые я не хочу отображать.
SELECT firstName
,lastName
,applicationDate
,gpa
FROM Student
WHERE MAX(gpa)
AND applicationDate < 'YYYY-MM-DD');
У меня возникли проблемы с написанием моего заявления об условиях.
когда я набираю код, подобный этому:
SELECT firstName
,lastName
,applicationDate
,MAX(gpa)
FROM Student
WHERE applicationDate < 'YYYY-MM-DD');
Он будет отображать данные из разных строк.
Комментарии:
1. Упорядочите свою таблицу по gpa и ограничьтесь 1 результатом.
Ответ №1:
Я бы использовал LIMIT
здесь:
SELECT
firstName,
lastName,
applicationDate,
gpa
FROM Student
WHERE applicationDate < 'YYYY-MM-DD'
ORDER BY
gpa DESC
LIMIT 1;
Это не относится к случаю, когда два или более учащихся могут быть привязаны к самому высокому среднему баллу. В этом случае мы могли бы либо использовать подзапрос в WHERE
предложении, например
WHERE gpa = (SELECT MAX(gpa) FROM Student WHERE applicationDate < 'YYYY-MM-DD')
Или мы могли бы использовать RANK
аналитическую функцию, если вы используете MySQL 8 .
Ответ №2:
Используйте order by и limit, чтобы получить желаемый результат, например:
SELECT firstName, lastName, applicationDate, gps WHERE applicationDate < 'YYYY-MM-DD' ORDER BY gpa DESC LIMIT 1
Ответ №3:
выберите max (gpa) в качестве GPA из таблицы, где date <‘2019-01-11’