很简单,我需要使用SQL查找学生成绩。 例如,如果我有下表定义成绩
Marks (int)
Grade (Char)
和这样的数据:
Marks | Grade
__90 | A+
__80 | A
__70 | A-
__60 | B
__50 | C
__40 | D
好的,说过,如果我的学生获得了73分,我如何使用SQL中的上述评分来计算她的成绩。
非常感谢你......
答案 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”数组中。现在,在每次迭代时,执行以下操作:
步骤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'];
如果您有更好的方法,请在此处提及。 谢谢你的贡献...