帮助SQL聚合函数

时间:2010-10-28 05:43:21

标签: sql aggregate-functions

我一直在学习SQL大约一天,而且我遇到了路障。请帮我解决以下问题:

STUDENT (**StudentNumber**, StudentName, TutorialNumber)
TUTORIAL (**TutorialNumber**, Day, Time, Room, TutorInCharge)
ASSESSMENT (**AssessmentNumber**, AssessmentTitle, MarkOutOf)
MARK (**AssessmentNumber**, **StudentNumber**, RawMark)

PK和FK在“**”中识别。我需要生成以下查询:

1)评估任务列表结果显示:评估编号,评估标题和平均原始标记。我知道如何将avg函数用于单个列,但是要显示多列的内容......这里有点不确定。

我的尝试:

SELECT RawMark, AssessmentNumber, AsessmentTitle
FROM MARK, ASSESSMENT
WHERE RawMark = (SELECT (RawMark) FROM MARK)
AND MARK.AssessmentNumber = ASSESSMENT.AssessmentNumber;

2)关于教程注册的报告显示:教程编号,日,房间,主管导师和注册学生人数。与avg函数相同,现在用于count函数。这需要2次查询吗?

3)在每个评估任务中列出每个学生的原始标记,显示:评估编号,评估标题,学号,学生姓名,原始标记,主管和时间。按照指导,日期和时间排序。

1 个答案:

答案 0 :(得分:0)

以下是第一个示例,只需采用逻辑,看看是否可以将其扩展到其他问题。如果你找不到任何可靠的例子,我发现这些东西很难学习,但是一旦掌握了它,你就会很快解决它。

1)

SELECT a.AssessmentNumber, a.AssessmentTitle, AVG(RawMark)
FROM ASSESSMENT a LEFT JOIN MARK m ON a.AssessmentNumber = m.AssessmentNumber
GROUP BY a.AssessmentNumber, a.AssessmentTitle

或者不使用左连接或别名表名称

SELECT ASSESSMENT.AssessmentNumber, ASSESSMENT.AssessmentTitle, AVG(RawMark)
FROM ASSESSMENT,MARK
WHERE ASSESSMENT.AssessmentNumber = MARK.AssessmentNumber
GROUP BY ASSESSMENT.AssessmentNumber, ASSESSMENT.AssessmentTitle