这是peterm在这个板上已经回答的问题的第2部分.再次感谢peterm!
所以我的代码将返回给定学生的前三个测试分数.我的表如下所示:
学生ID,考试ID,分数
1,1,95
1,2,90
1,3,4,90
2,99
2,95
2,90
SELECT StudentID,TestID,Testscore FROM MyTable t WHERE TestID IN ( SELECT TOP 3 TestID FROM MyTable WHERE StudentID = t.StudentID ORDER BY Testscore DESC,TestID ) ORDER BY StudentID,Testscore DESC,TestID;
我的新问题是现在我需要在主题和年份的表格中添加两个新字段,因此我需要找到每个学科 – 学生 – 年组合的前3个分数.一旦我得到每个组合的前三个分数,我需要对它们进行平均,这样我将得到每个学生 – 主题 – 年组合的前3个分数的平均分数.希望,我已经足够清楚地解释了这一点,而无需模拟另一张桌子.
提前致谢.
解决方法
你可以做这样的事情
SELECT StudentID,Year,Subject,AVG(Testscore) AS Avgscore FROM ( SELECT StudentID,Testscore FROM MyTable t WHERE TestID IN ( SELECT TOP 3 TestID FROM MyTable WHERE StudentID = t.StudentID AND Year = t.Year AND Subject = t.Subject ORDER BY Testscore DESC,TestID ) ) q GROUP BY StudentID,Subject ORDER BY StudentID,Subject;
样本输出:
| STUDENTID | YEAR | SUBJECT | AVGscore | |-----------|------|---------|----------| | 1 | 2012 | 1 | 91 | | 1 | 2012 | 2 | 84 | | 2 | 2012 | 1 | 94 | | 2 | 2012 | 3 | 95 |
这是SQLFiddle演示.演示通常适用于sql Server,但预计可以在MS Access中运行,可能需要进行少量的语法调整
原文地址:https://www.jb51.cc/mssql/80233.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。