mysql存储过程公式新手一步一步?

7uzetpgm  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(353)

你好,我是一个mysql新手,需要一步一步的帮助这个案件
我有数据库名 p_data 它有不同的表,关系由
index unique 价值
第一个表名是 f_table ```

| f_table |

| AV2 |
| |

第二张table是 `s_table` ```
-----------------
 |    s_table    |
 -----------------
 |      AV3      |
 |               |
 ----------------

我要做每一个 AV3 每个数据项的值等于此公式(如excel)

AV3 =

 =IF(AND(AV2>=1, AV2<40), 0, IF(AND(AV2>=40, AV2<=49), 18, 
  IF(AND(AV2>=50, AV2<=59), 36, IF(AND(AV2>=60, AV2<=69), 55, 
  IF(AND(AV2>=70, AV2<=79), 73,IF(AND(AV2>=80),91,""))))))

例子

if AV2 >= 1 or < 40 
 So AV3 = 0

 if AV2 >= 40 or =< 49 
 So AV3 = 18

 and So on ...

如何运行mysql来处理每个数据项,并根据第一个公式示例运行值,并用每个数据项从第一个表自动添加到第二个表?

vcudknz3

vcudknz31#

这是对尼克答案的一个调整:

UPDATE s_table s JOIN
       p_table p
       ON s.id = p.id
    SET s.AV3 = (CASE WHEN p.AV2 < 40 AND p.AV2 >= 0 THEN 0
                      WHEN p.AV2 < 50 THEN 18
                      WHEN p.AV2 < 60 THEN 36
                      WHEN p.AV2 < 70 THEN 55
                      WHEN p.AV2 < 80 THEN 73
                      WHEN p.AV2 >= 80 THEN 91
                      ELSE NULL
                 END);

这些变化是:
简化到 CASE 表达式,认识到值是按顺序实现的。
修复 ELSE 要使用的子句 NULL ,因此类型是一致的。

s71maibg

s71maibg2#

假设两者都有 p_table 以及 s_table 有一个领域 id 对于相应的条目具有相同的值,可以执行以下操作:

UPDATE s_table s
JOIN p_table p ON s.id=p.id
SET s.AV3 = CASE 
    WHEN p.AV2 BETWEEN 1 AND  39 THEN 0
    WHEN p.AV2 BETWEEN 40 AND  49 THEN 18
    WHEN p.AV2 BETWEEN 50 AND  59 THEN 36
    WHEN p.AV2 BETWEEN 60 AND  69 THEN 55
    WHEN p.AV2 BETWEEN 70 AND  79 THEN 73
    WHEN p.AV2 >= 80 THEN 91
    ELSE NULL
    END

正如@gordonlinoff所指出的,最好是 ELSE 子句返回 NULL 而不是 '' 与整数数据类型一致。

相关问题