基于分数和平均分的学生排名

时间:2013-08-26 20:39:30

标签: ms-access ms-access-2010 ranking

这是我的问题:

  1. 如果学生在任何科目中得分为49分及以下,他将不会被列入排名。

  2. 所有科目达到49分以上的学生应按其平均成绩排名

  3. 如果学生得到相同的平均分,他们的等级应该相等。

  4. 这是我的样本:

    Table1                      
    Student_ID  Name    Math    English   Science   Average 
       1        Apple    64       49        70      61.00   
       2        Boy      80       79        65      74.67   
       3        Cat      51       78        66      65.00   
       4        Dove     50       76        64      63.33   
       5        Eden     81       88        72      80.33   
       6        Fox      80       79        65      74.67   
       7        Golf     32       88        69      63.00   
    
    
    Output                      
    Student_ID  Name    Math    English   Science   Average    RANK
       1        Apple    64       49        70      61.00   
       2        Boy      80       79        65      74.67        2
       3        Cat      51       78        66      65.00        3
       4        Dove     50       76        64      63.33        4  
       5        Eden     81       88        72      80.33        1
       6        Fox      80       79        65      74.67        2
       7        Golf     32       88        69      63.00   
    

    这是我的疑问:

    SELECT
        tmain.Student_ID,
        tmain.Name,
        tmain.Math,
        tmain.English,
        tmain.Science,
        tmain.Average,
        IIf(sub.RANK=0, Null, sub.RANK) AS RANK
    FROM
        Table1 AS tmain
        LEFT JOIN
        (
            SELECT
                t1.Student_ID,
                t1.Average,
                (
                    SELECT Count(*)
                    FROM Table1 AS t2
                    WHERE
                            t2.Math>49
                        AND t2.English>49
                        AND t2.Science>49
                        AND t2.Average>=t1.Average                    
                ) AS RANK
            FROM Table1 AS t1
            WHERE
                    t1.Math>49
                AND t1.English>49
                AND t1.Science>49
        ) AS sub
        ON tmain.Student_ID = sub.Student_ID;
    

    基于查询的输出:

    Output                      
    Student_ID  Name    Math    English   Science   Average    RANK
       1        Apple    64       49        70      61.00   
       2        Boy      80       79        65      74.67        3
       3        Cat      51       78        66      65.00        4
       4        Dove     50       76        64      63.33        5  
       5        Eden     81       88        72      80.33        1
       6        Fox      80       79        65      74.67        3
       7        Golf     32       88        69      63.00   
    

    有人可以帮我解决这个问题吗,输出跳过第二等级

    注意:Rank值不存储在表格中。

1 个答案:

答案 0 :(得分:0)

除非我误解你,否则这将完全满足你的需要:

SELECT tblStudents.StudentID, 
  tblStudents.SName, 
  tblStudents.Math, 
  tblStudents.English, 
  tblStudents.Science, 
  tblStudents.AvgScore, 
  tblStudents.Rank
FROM tblStudents
WHERE 
  (((tblStudents.Math)>49) AND 
   ((tblStudents.English)>49) AND 
   ((tblStudents.Science)>49))
ORDER BY tblStudents.AvgScore DESC;