我有两张桌子,一张是学生的成绩,一张是他们正在上的课程。
表1:结果
|student | course | date | grade | examiner | PK:id| |:-------|:-------|:-----|:------|:--------:|:-----: |20122222|INFA | null | 2 | TC | 1 | |20123333|INFA | null | 8 | TC | 2 | |20122222|INFA | null | 4 | VB | 3 | |20122222|INFA | null | 6 | VB | 4 | |20123333|INFB | null | 10 | null | 5 | |20124444|INFB | null | 4 | VB | 6 | |20121234|INFA | null | 8 | VB | 7 | |20121234|INFC | null | 8 | GV | 8 |
PK代表主键,我也遗漏了日期,因为它们无关紧要
表2:课程
|PK:code| name |coordinator| |:------|:-------------:|:---------:| |INFA |Programming |VB | |INFB |Databases |VB | |INFC |WebApplications|BD | |INFD |OO Programming |null |
现在的目标是获得按降序排序的每个课程名称的最高,最低和平均成绩。现在我已经尝试了几件事,但我似乎无法正确输出。输出应为:
|name |highest|lowest|average| |:-------------:|:------|:-----|:------| |WebApplications|8 |8 |8.0 | |Databases |10 |4 |7.0 | |Programming |8 |2 |5.6 |
但我不能将它们排在课程名称上
答案 0 :(得分:0)
我猜查询应该如下所示:
SELECT min(grade) AS lowest, max(grade) AS highest, avg(grade) AS average
FROM results
GROUP BY course
ORDER BY average DESC.
如果您希望在同一查询中包含课程名称,请加入结果:
SELECT course.name, min(grade) AS lowest, max(grade) AS highest, avg(grade) AS average
FROM results
JOIN course on results.course = course.code
GROUP BY course
ORDER BY average DESC
答案 1 :(得分:0)
如果你有一个没有结果的课程并且想要显示它,我会使用左连接课程来获得结果,然后使用基本的聚合功能。我假设平均降序。
SELECT c.name, max(R.grade) highest, min(R.grade) lowest, avg(R.grade) mAverage
FROM Course C
LEFT JOIN Results R
on C.Code = R.Course
WHERE C.Coordinator is not null
--Not sure if SQL server allows you to group by columns not in select; I know mySQL will if group by extensions are enabled.
GROUP BY C.Code, C.Name
ORDER BY mAverage DESC