我正在尝试使用下面的查询得出最大的avrg
,但是我却很反感
ORA-00937:不是单组分组功能 00937. 00000-“不是单组分组功能” *原因:
*操作:第1行错误:
SELECT B.STUDENT_ID,
A.FRIST_NAME,
A.FATHER_NAME,
A.LAST_NAME,
SUM (B.GRADE) AS SUM_GRADE,
COUNT(B.COURSE_ID) AS COURSE_COUNT,
max(SUM(B.GRADE) / COUNT(B.COURSE_ID)) AS AVRG
FROM STUDENT A,
STUDENT_COURSE B
WHERE A.STUDENT_ID = B.STUDENT_ID
GROUP BY A.FRIST_NAME, A.FATHER_NAME, A.LAST_NAME, B.STUDENT_ID;
当我删除max
函数时,此错误消失了,任何人都可以帮助我为什么?
我尝试使用max
,但收到错误消息,提示无效的国家/地区
与此查询搭配使用的任何方式?
答案 0 :(得分:2)
一种选择是将当前查询(不使用MAX
)用作内联视图,并将MAX
函数应用于“求和/计数”:
SELECT student_id,
first_name,
father_name,
last_name,
sum_grade,
course_count,
-- this:
MAX(avrg) max_avrt
FROM (-- your current query
SELECT b.student_id,
a.frist_name,
a.father_name,
a.last_name,
SUM(b.grade) AS sum_grade,
COUNT(b.course_id) AS course_count,
SUM(b.grade) / COUNT(b.course_id) AS avrg
FROM student a,
student_course b
WHERE a.student_id = b.student_id
GROUP BY a.frist_name,
a.father_name,
a.last_name,
b.student_id
)
GROUP BY student_id, first_name, father_name, last_name, sum_grade, course_count;
但是,您不会获得任何好的效果,因为由于使用外部GROUP BY
子句,您仍然会获得相同的记录集。考虑以其{strong>分析形式使用SUM
。
这是一个简单的示例,它基于Scott的模式显示了我的意思。
这就是您现在拥有的:
SQL> select deptno, sum(sal) / count(*) ssc
2 from emp
3 group by deptno
4 order by deptno;
DEPTNO SSC
---------- ----------
10 2916,66667
20 2258,33333
30 1566,66667
显然,您想选择第一个SSC值(2916)。如果应用我之前写的内容(即使用该查询作为内联视图),则会得到以下信息:
SQL> select deptno, max(ssc) max_ssc
2 from (select deptno, sum(sal) / count(*) ssc
3 from emp
4 group by deptno
5 )
6 group by deptno
7 order by deptno;
DEPTNO MAX_SSC
---------- ----------
10 2916,66667
20 2258,33333
30 1566,66667
SQL>
没有改善,是吗?因此,您可能需要分析功能:
SQL> select deptno,
2 max(sum(sal) / count(*)) over (order by deptno) max_ssc
3 from emp
4 group by deptno
5 order by deptno;
DEPTNO MAX_SSC
---------- ----------
10 2916,66667
20 2916,66667
30 2916,66667
这确实返回了所需的MAX值(如果这就是您要的值。如果没有,请解释一下您希望得到的结果)。