问题陈述:
我有一个 EXAM
表,其中包含以下字段和示例数据
student_id exam_date exam_score
-----------------------------------
a1 2018-03-29 75
a1 2018-04-25 89
b2 2018-02-24 91
我想编写一个 SQL 查询来输出以下字段
1. student_id
2. exam_date
3. highest_score_to_date
4. average_score_to_date
5. highest_exam_score_ever
我的 SQL 查询:
select
a.student_id,
b.exam_date,
highest_exam_score_to_date,
average_exam_score_to_date,
highest_exam_score_ever
from
(
select
student_id,
exam_date,
max(score) as highest_exam_score_to_date,
avg(score) as average_exam_score_to_date
from exam
group by
student_id,
exam_date
) a
left join
(
select
student_id,
max(score) as highest_exam_score_ever
from exam
group by
student_id
) b
on a.student_id = b.student_id
我可以通过编写更好的 SQL 查询来实现我的结果吗?
最佳答案
您确实可以将表与多个聚合子查询连接起来,这些子查询计算学生和考试级别的相关值。
但是使用窗口函数似乎更简单:
select
t.*,
max(exam) over(partition by student_id order by exam_date) highest_score_to_date,
avg(exam) over(partition by student_id order by exam_date) average_score_to_date,
max(exam) over(partition by student_id) highest_score_ever
from mytable t
关于sql - 查询考试成绩计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60478398/