在SQL中计算成绩

时间:2011-03-28 15:13:08

标签: sql

很简单,我需要使用SQL查找学生成绩。 例如,如果我有下表定义成绩

Marks (int)
Grade (Char)

和这样的数据:

Marks | Grade

__90 | A+

__80 | A

__70 | A-

__60 | B

__50 | C

__40 | D

好的,说过,如果我的学生获得了73分,我如何使用SQL中的上述评分来计算她的成绩。

非常感谢你......

6 个答案:

答案 0 :(得分:7)

您希望最高值低于或等于您的值,将73替换为您的值...

select top 1 Grade from TableName where Mark <= 73 order by Mark desc

答案 1 :(得分:2)

假设您的GradeCutoff表格是使用以下内容创建的:

CREATE TABLE GradeCutoff
  ( mark int
  , grade char(3)
  )

您要查看@studentMark

SELECT grade
FROM GradeCutoff
WHERE mark =
   ( SELECT max(mark)
     FROM gradeCutoff
     WHERE @studentMark >= mark
   )
;

注意:您可能还需要在截止表中添加(0,'E')行。

答案 2 :(得分:-1)

SELECT Grade FROM 'table name here' WHERE student_mark <= 79 AND student_mark >= 70 - 为了更具体,我需要查看表格的实际布局。但是,这种影响会起作用。

答案 3 :(得分:-1)

我认为您应该为此定义一个UDF,它将学生标记作为参数并根据给定的表返回成绩。

然后你可以从学生表中获得任何学生的成绩 -

select studentID, getGrade(studentMarks) from student

此处getGrade(studentMarks)是UDF,studentMarks是学生表中带有标记的列(例如:在您的情况下为73)

提示:您需要在UDF中使用CASE构造来获得成绩。

答案 4 :(得分:-2)

如果标记实际上是10的常规倍数,则可以查看SQL MOD函数

答案 5 :(得分:-2)

由于我没有找到任何使用MySQL的方法,我不得不做一些PHP编程来实现结果。目标是从评分中获得最接近的值。

好的假设,我们的问题中定义了等级。

$MarksObt = 73 <- Marks obtained by the student:

步骤1:从ASC订购的Marks订购的mysql获得成绩(ASC订单很重要):

SELECT marks, grade FROM gradings ORDER BY marks

第2步:创建一个数组变量“$ MinGrades”。循环上面的查询结果。假设MySQL结果存储在“$ Gradings”数组中。现在,在每次迭代时,执行以下操作:

  1. 从$ MarksObt
  2. 中减去 $ Grading ['marks']
  3. 如果结果大于或等于0,则将结果添加到“$ MinGrades”数组
  4. 步骤3:当循环结束时,“$ MinGrades”数组的第一个元素将是最接近的值... DONE

    以下是实现上述内容的PHP代码:

    $MinGrades = array();
    
    foreach($Gradings as $Key=>$Grading){
        $Subtract = $MarksObt - $Grading['marks'];
        if( $Subtract >= 0 )
            array_push($MinGrades, array($Key=>$Subtract))
    }
    
    $GradeKey = key($MinGrades[0]); // Get key of first element in the array
    print $Gradings[$GradeKey]['grade'];
    

    如果您有更好的方法,请在此处提及。 谢谢你的贡献...