0

给定一张学生和成绩表,有没有办法将每个学生的成绩增加 10%,但不超过 100?

现在我做

UPDATE studentCourse
SET grade = grade + 10 * (grade/100) 
WHERE csid = 1

换句话说,如果学生有 60,更新后他应该有 66。但如果学生有 98,更新后他的成绩应该是 100(而不是 108)。

所有这些都必须在标准 SQL 中完成

4

3 回答 3

1

我没有测试此代码的实例,但假设您的数据是可实现的(全部为 0 - 100),您可以在分数低于 90 的情况下使用 CASE 语句来添加 10%,否则在另一种情况下,我们可以说得分为 100。

例如:

UPDATE [studentCourse]
SET grade=
(
CASE
  WHEN
  (grade <= 90)
    THEN grade + 10 * (grade/100)
  ELSE
    (100)
  END
)
WHERE
csid = 1
于 2012-11-06T23:03:19.080 回答
0

你可以只运行两个语句

UPDATE studentCourse
SET grade = grade + 10 * (grade/100) 
WHERE csid = 1;

其次是

UPDATE studentCourse
SET grade = 100
where csid = 1
  and grade > 100;

COMMIT;
于 2012-11-06T23:04:30.683 回答
0

MySQL 有一个功能LEAST()可以帮助:

UPDATE studentCourse
SET grade = LEAST(100, grade + 10 * (grade/100))
WHERE csid = 1;

这个LEAST()函数是 MySQL 特有的。如果您想严格遵守 ANSI SQL,请CASE按照@chrisc 的建议使用。

于 2012-11-06T23:07:48.860 回答