【问题标题】:How to calculate student rank in access如何计算访问中的学生排名
【发布时间】:2019-08-29 14:46:52
【问题描述】:

我想根据下表计算学生的排名。假设任何学生在班上得分最高,但他/她在任何一门科目中不及格,那么他们不应该考虑排名。

1.表名是“结果数据”

满分总分是(1000)

及格分数是 33

ID  |   subject ID   | subject        | fullmarks | obtmarks |passmarks
1   | 1              |  HINDI         |   100     |  80      | 33
2   | 2              |  ENGLISH       |   100     |  90      | 33
3   | 3              |  MATHEMATICS   |   100     |  76      | 33
4   | 4              |  SOCIAL SCIENCE|   100     |  69      | 33

其他科目也一样。

2。表名是“结果”

 ID|result    | student |student|mother |father |class|term/    |rollno|section|
   |date      | ID      |name   |name   |name   |     |semester |      |       |
1  |11.09.2019|   1     |Jasmine|Eliana |Ritesh |  8  |1st Term |  10  |   A   | 
2  |11.09.2019|   2     |Kiyas  |Fanny  |Rajnish|  10 |1st Term |  1   |   B   |
3  |11.09.2019|   3     |Ena    |Rashmi |Prakash|  9  |1st Term |  12  |   C   |
4  |11.09.2019|   4     |Sunaina|Ankita |Chander|  7  |1st Term |  15  |   A   |
5  |11.09.2019|   5     |Ankit  |Sujata |Roy    |  8  |1st Term |  11  |   B   |
6  |11.09.2019|   6     |Krishna|Bala   |Gopal  |  8  |1st Term |  5   |   C   |
7  |11.09.2019|   7     |Ranga  |Hima   |Hitesh |  9  |1st Term |  7   |   A   |
8  |11.09.2019|   8     |Suraj  |Priya  |Hemal  |  7  |1st Term |  10  |   B   |
9  |11.09.2019|   9     |Saurabh|Archana|Suyog  |  10 |1st Term |  9   |   B   |

3.表名是“主题”

 ID  | subject        | fullmarks |  passmarks
 1   |  HINDI         |  100      |  33
 2   |  ENGLISH       |  100      |  33
 3   | MATHEMATICS    |  100      |  33
 4   | SOCIAL SCIENCE |  100      |  33
 5   | Computer       |   50      |  20

其他科目也一样。

subjects表的id和resultdata表的subjectID有关系。

如何使用公式或 vba 代码解决此问题?

  • 条件1:根据学生的总成绩计算每个学生的排名。但是任何学生在任何他们不会考虑进入前 10 名的科目中都失败了。
  • 条件 2:根据学生的总成绩计算每个学生的排名。

我在查询中尝试了这个公式,但它不起作用:

Rank: DCount("*","resultdata","[fullmarks]>" & [obtmarks])+1

【问题讨论】:

  • 您使用什么语言?这是r吗? SQL?您应该编辑您的问题以提供更多说明和标签。
  • 问题中明确提到。顺便说一句,我正在使用 ms office >>access 2019
  • 这对我不起作用。我对此还有另一个条件,即如果学生在任何科目中不及格,他们将不会获得任何排名,但他/她在班级中得分最高。
  • @June7 感谢您的建议,但对我不起作用。因为我的情况不同,并且该查询不能解决我的问题。

标签: ms-access rank calculation


【解决方案1】:

如果您不想将成绩不及格的学生包括在内,请进行初步查询以消除他们。然后使用该查询对剩余的学生进行排名。考虑:

查询1:通过

SELECT resultdata.StudentID, Sum(resultdata.obtmarks) AS SumOfobtmarks
FROM resultdata
GROUP BY resultdata.StudentID
HAVING resultdata.StudentID Not In (SELECT resultdata.StudentID
       FROM resultdata
       WHERE resultdata.obtmarks<[passmarks]);

查询2:

SELECT Passing.SumOfobtmarks, Passing.StudentID, 
    (SELECT Count(*) FROM Passing AS T1 WHERE T1.SumOfobtmarks > Passing.SumOfobtmarks)+1 AS Rank
FROM Passing
ORDER BY Passing.SumOfobtmarks DESC;

但是,如果多个学生的分数相同,则结果可能不会令人满意。这是一个常见的话题,有很多例子。对于一篇评论http://allenbrowne.com/ranking.html。正如艾伦的文章中所解释的,最好的解决方案可能是一个涉及“临时”表的解决方案。或者试试 Lebans Serialize 函数,链接在 Allen 的文章中。另一个演示这些技术的优秀教程http://www.mendipdatasystems.co.uk/rank-order-queries/4594424063

【讨论】:

  • @June,在查询2中你提到了T1,你能告诉我它定义为变量吗?还让我知道我们可以在访问或查询设计视图中的 SQL 视图中的何处编写这些查询。我是访问新手。
  • 请简要介绍一下查询2,例如通过,T1
  • T1 是查询 Passing 的别名,因此 Passing 可以在同一个 SELECT 语句中使用两次。可以将这些查询语句复制/粘贴到查询生成器的 SQL 视图中。
  • 以上查询可以找到1到10的排名还是计算所有学生的排名?如果它再次计算所有学生的排名,那么它不会解决我的问题,我只需要排名 1 到 10 就不会失败。
  • 您的问题中没有说明该要求。在第二个查询中尝试SELECT TOP 10
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 2018-01-11
相关资源
最近更新 更多