我需要按降序SQL选择某些名称的最大值,最小值和平均值

时间:2017-06-09 17:24:11

标签: mysql sql-server

我有两张桌子,一张是学生的成绩,一张是他们正在上的课程。

表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    |

但我不能将它们排在课程名称上

2 个答案:

答案 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