MYSQL CASE WHEN UPDATE查询

4

这是我的表格。

我需要做的是创建一个CASE WHEN UPDATE查询来更新:

  • 如果在1-15范围内,将CurrentCredit加1

  • 如果在16-30范围内,将CurrentCredit加2

  • 如果大于等于31,将CurrentCredit乘以0.10并四舍五入


请参见 https://dev59.com/i2w15IYBdhLWcg3wQpbS。 - nawfal
1个回答

6

请查看下面的示例

SQL Fiddle演示

类似于以下内容

UPDATE MyTable
SET CurrentCredit = 
CASE 
  WHEN CurrentCredit BETWEEN 1 AND 15
    THEN CurrentCredit + 1
  WHEN CurrentCredit BETWEEN 16 AND 30
    THEN CurrentCredit +2
  WHEN CurrentCredit >= 31
    THEN CurrentCredit * 10
  ELSE CurrentCredit
END

另外,请记住,如果CurrentCredit是一个FLOAT而不是INT,您可能需要尝试类似以下的操作:

UPDATE MyTable
SET CurrentCredit = 
CASE 
  WHEN CurrentCredit >= 1 AND CurrentCredit < 16
    THEN CurrentCredit + 1
  WHEN CurrentCredit >= 16 AND CurrentCredit < 31
    THEN CurrentCredit +2
  WHEN CurrentCredit >= 31
    THEN CurrentCredit * 10
  ELSE CurrentCredit
END;

编辑

如果需要更正的请求是(>= 31 CurrentCredit + CEILING(CurrentCredit * 0.1)),请考虑使用CEILING函数

UPDATE MyTable
SET CurrentCredit = 
CASE 
  WHEN CurrentCredit BETWEEN 1 AND 15
    THEN CurrentCredit + 1
  WHEN CurrentCredit BETWEEN 16 AND 30
    THEN CurrentCredit +2
  WHEN CurrentCredit >= 31
    THEN CurrentCredit + CEILING(CurrentCredit * 0.1)
  ELSE CurrentCredit
END;

SQL Fiddle DEMO


@Mahmoud Gamal,我认为您不应该删除您的答案,因为它在OP规范方面是正确的。只是可能需要提到区别。 - Adriaan Stander
我在31个以上的学分上犯了一个错误 :-
本来应该是将31个以上的学分乘以10%,然后加上这个数字并四舍五入。 有关如何执行此操作的任何说明?
- Dylan McCann
如果不行也没关系,我理解,你已经非常有帮助了,我非常感激。 - Dylan McCann
@DylanMcCann 看一下更新并使用CEILING(向上取整) - Adriaan Stander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接