给定一张学生和成绩表,有没有办法将每个学生的成绩增加 10%,但不超过 100?
现在我做
UPDATE studentCourse
SET grade = grade + 10 * (grade/100)
WHERE csid = 1
换句话说,如果学生有 60,更新后他应该有 66。但如果学生有 98,更新后他的成绩应该是 100(而不是 108)。
所有这些都必须在标准 SQL 中完成
我没有测试此代码的实例,但假设您的数据是可实现的(全部为 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
你可以只运行两个语句
UPDATE studentCourse
SET grade = grade + 10 * (grade/100)
WHERE csid = 1;
其次是
UPDATE studentCourse
SET grade = 100
where csid = 1
and grade > 100;
COMMIT;
MySQL 有一个功能LEAST()
可以帮助:
UPDATE studentCourse
SET grade = LEAST(100, grade + 10 * (grade/100))
WHERE csid = 1;
这个LEAST()
函数是 MySQL 特有的。如果您想严格遵守 ANSI SQL,请CASE
按照@chrisc 的建议使用。