2013-10-09 4 views
0

Я пытаюсь запросить имя, майор и gpa студентов, у которых самый высокий показатель GPA. Там может быть более одного ученика.Запрос Oracle для поиска наибольшего значения (gpa) из таблицы?

SELECT student_name, major, MAX(gpa) 
FROM Student; 

я получаю:

ERROR at line 1: 
ORA-00937: not a single-group group function 

Я Гугл, что я должен либо отбросить функции группы (который я не имею, но попытался добавить) или добавить группу по статье, которая включает в себя все индивидуальную столбца.

Я также попытался группу по статье:

SELECT student_name, major, MAX(gpa) 
FROM Student 
GROUP BY student_name; 

И я получаю ошибку:

ERROR at line 1: 
ORA-00979: not a GROUP BY expression 

Может кто-то пожалуйста мне точку в правильном направлении?

ответ

0

Вы не можете смешивать выражения, которые дают один результат строки в каждой строке в таблице (например, в вашем случае, student_name и major) и выражений, которые дают единственный результат линии на группу строк в таблице (т. е. совокупные функции, например MAX(gpa) в вашем случае). Сколько строк должно выводиться в таком случае?

Вам нужно разбить ваш запрос на две логические части - один из них найдет самый высокий показатель GPA, а второй найдет всех студентов с таким GPA. Один из способов сделать это - использовать агрегированное выражение в подзапросе IN:

SELECT student_name, major, gpa 
FROM student 
WHERE gpa IN (SELECT MAX(gpa) FROM student) 
Смежные вопросы