有一个任务表。
STUDENT_ID COURSE_ID DATE TASK_NR FILE_NAME POINTS TASK_ID
---------- --------- -------- ---------- -------------------- ---------- ----------
10020011 I319 17.06.03 1 t3.txt 8 3
10020014 I319 01.06.03 1 t7.txt 10 4
10020015 I319 11.07.03 1 t8.txt 10 5
10020011 I319 11.06.04 2 t2.txt 7 6
10020015 I319 11.06.04 3 t2.txt 6 7
10020013 I319 11.06.04 3 t3.txt 8 8
10020011 Iad307 11.06.03 1 t1.txt 5 9
10020011 Id310 12.06.03 1 t2.txt 7 10
10020011 ID218 17.06.03 1 t3.txt 8 11
10020014 Iad307 01.06.03 1 t7.txt 10 12
10020015 Iad307 11.07.03 1 t8.txt 10 13
任务的本质是从TASKS表中得到每个学生在哪个科目中他的任务平均分是最好的。
应该看起来像这样
STUDENT_ID COURSE_ID AVG
---------- --------- ----------
10020011 ID218 8
10020013 ID218 9,5
10020014 I319 10
10020015 Iad307 10
首先,我找到每个学生每个科目的平均分数
SELECT student_id, course_id, AVG(points) AS avg FROM tasks GROUP BY student_id, course_id
ORDER BY student_id;
STUDENT_ID COURSE_ID AVG
---------- --------- ----------
10020011 Id310 7
10020011 Iad307 5,75
10020011 I319 5
10020011 ID218 8
10020013 ID218 9,5
10020013 I319 8
10020014 I319 10
10020014 Iad307 6,25
10020014 ID218 6
10020015 Id309 5,5
10020015 I319 8
接下来,我想获取每个学生的学生id、课程id和这门课程的最高分
SELECT student_id, course_id, MAX(avg) AS max FROM (
SELECT student_id, course_id, AVG(points) AS avg FROM tasks GROUP BY student_id, course_id
) GROUP BY student_id ORDER BY student_id;
我得到一个错误
ORA-00979: 表达式不是 GROUP BY 表达式 00979。00000 - “不是 GROUP BY 表达式”
尝试了变体
SELECT student_id, ANY_VALUE(course_id), MAX(avg) AS max FROM (
SELECT student_id, course_id, AVG(points) AS avg FROM tasks GROUP BY student_id, course_id
) GROUP BY student_id ORDER BY student_id;
我得到一个错误
ORA-00904: “ANU_VALUE”:无效的标识符 00904。00000 - “%s:无效的标识符”
是否有 ANY_VALUE 的替代方案或另一种解决问题的方法?