【问题标题】:Limitations on incrementing values (standard sql)递增值的限制(标准 sql)
【发布时间】:2012-11-06 23:00:04
【问题描述】:

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

我现在可以

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

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

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

【问题讨论】:

  • 你不是说66应该变成72.6吗?

标签: sql increment


【解决方案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

【讨论】:

  • 我更喜欢你的原始答案,没有“偷偷摸摸”的编辑只是为了成为“最古老的正确”答案。仍然。我赞成:)
  • 等级应小于等于90(等级
  • 我想我最好用一个例子来支持它;)
【解决方案2】:

你可以只运行两个语句

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

紧随其后

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

COMMIT;

【讨论】:

    【解决方案3】:

    MySQL 有一个函数LEAST() 可以提供帮助:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-16
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2010-09-26
      • 1970-01-01
      • 2012-08-12
      相关资源
      最近更新 更多