我有一个 employee 存储一些数据的表,包括 salary . 我又加了一个专栏 grade .
employee
salary
grade
If salary is between 0-2000 grade is 1. If between 2000-3000 grade is 2. If more than 3000 than 3.
我需要手动完成吗 UPDATE 或者有没有可能用 ALTER .
UPDATE
ALTER
oogrdqng1#
为什么要将等级存储在表中?你总是可以从薪水中提取等级。在select中,可以使用case语句。
dba5bblo2#
在您的例子中,最好的选择是使用create table和generated columns,如注解中提到的@madhur另一种选择是使用下面的更新查询,但要考虑到任何薪资值的更新都可能会刹住两者之间的关系 salary 以及 grade 柱。
UPDATE `employee ` SET `grade` = CASE WHEN salary >= 0 AND salary <=2000 THEN 1 WHEN salary > 2000 AND salary <=3000 THEN 2 WHEN salary > 3000 THEN 3 ELSE `0` END
0md85ypi3#
可以通过更新来实现这一点。但是,您可能会发现使用生成的列更好:
alter table employee add grade int generated as (case when salary < 2000 then 1 when salary < 3000 then 2 else 3 end);
这很方便,因为如果分数发生变化或添加新行时,您不必更新等级。 GRADE 在使用时计算。
GRADE
3条答案
按热度按时间oogrdqng1#
为什么要将等级存储在表中?你总是可以从薪水中提取等级。在select中,可以使用case语句。
dba5bblo2#
在您的例子中,最好的选择是使用create table和generated columns,如注解中提到的@madhur
另一种选择是使用下面的更新查询,但要考虑到任何薪资值的更新都可能会刹住两者之间的关系
salary
以及grade
柱。0md85ypi3#
可以通过更新来实现这一点。但是,您可能会发现使用生成的列更好:
这很方便,因为如果分数发生变化或添加新行时,您不必更新等级。
GRADE
在使用时计算。