Oracle查询从表中查找最大值(gpa)?

时间:2013-10-09 05:48:50

标签: sql oracle

我正在尝试查询GPA最高的学生的姓名,专业和gpa。可以有不止一个学生。

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

我一直在:

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

我用谷歌搜索我应该删除一个组函数(我没有,但尝试添加)或添加一个包含列出的所有单个列表达式的group by子句。

我也试过了group by子句:

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

我收到错误:

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

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

你不能混合表格中每行给出单行结果的表达式(例如,在你的情况下,student_namemajor)和表达式,每个表格中的一组行(即聚合函数,如您的案例中的MAX(gpa))。在这种情况下应该输出多少行?

您需要将查询分解为两个逻辑部分 - 一个找到最高GPA,第二个找到所有具有此类GPA的学生。一种方法是在IN子句的子查询中使用聚合表达式:

SELECT student_name, major, gpa
FROM   student
WHERE  gpa IN (SELECT MAX(gpa) FROM student)