2010-10-28 162 views
1

我一直在学习SQL大约一天,并且遇到了路障。请帮我提出以下问题: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)教程入学显示报表:教程号码,一天,室,导师负责学生的入学人数。与平均函数相同,现在用于计数函数。这需要2个查询吗?

3)列出每个学生的原始马克在每个显示的考核任务:评估号码,估标题,学号,学生姓名,生马克,导师费和时间。分班负责人,日间和时间。

+0

听起来像功课,是吗?如果你已经发布了你的进度,你应该采取一些措施。 – 2010-10-28 05:50:06

+0

@SQLrookie - 根据你对问题的看法,你似乎走在了正确的轨道上!我建议你发布到目前为止所有的东西,这里的人会很乐意提出改进方法,如果有的话 – InSane 2010-10-28 05:53:26

+0

好吧,我会发布我迄今为止所拥有的东西。 – SQLrookie 2010-10-28 05:57:11

回答

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 
+0

谢谢,但我没有被教过LEFT JOIN ...还有其他方法吗? – SQLrookie 2010-10-28 06:15:35

+0

根据数据的结构,您可以使用INNER JOIN或甚至只是JOIN关键字。 – JonVD 2010-10-28 06:50:26

+0

再次感谢。我会看看其他人。 – SQLrookie 2010-10-28 07:10:40