mysql - 用常量值更新表

标签 mysql sql

我的表中有 7 列(s0、s1、s2、s3、s4、s5、s6),我想执行以下查询:

UPDATE myTable SET s0=ROUND(s0/(s0+s1+s2+s3+s4+s5+s6)*100)/100,
  s1=ROUND(s1/(s0+s1+s2+s3+s4+s5+s6)*100)/100, 
  s2=ROUND(s2/(s0+s1+s2+s3+s4+s5+s6)*100)/100,
  s3=ROUND(s3/(s0+s1+s2+s3+s4+s5+s6)*100)/100, 
  s4=ROUND(s4/(s0+s1+s2+s3+s4+s5+s6)*100)/100, 
  s5=ROUND(s5/(s0+s1+s2+s3+s4+s5+s6)*100)/100, 
  s6=ROUND(s6/(s0+s1+s2+s3+s4+s5+s6)*100)/100;

问题是mysql更新s1,然后计算s2

如何在 sql 请求中为每一行修复值 (s0+s1+s2+s3+s4+s5+s6)

最佳答案

我相信它也应该完成这项工作(假设表有一个主键):

UPDATE myTable a
INNER JOIN 
(
  SELECT ROUND(s0/(s0+s1+s2+s3+s4+s5+s6)*100)/100 AS new_s0,
  ROUND(s1/(s0+s1+s2+s3+s4+s5+s6)*100)/100 AS new_s1, 
  ROUND(s2/(s0+s1+s2+s3+s4+s5+s6)*100)/100 AS new_s2,
  ROUND(s3/(s0+s1+s2+s3+s4+s5+s6)*100)/100 AS new_s3, 
  ROUND(s4/(s0+s1+s2+s3+s4+s5+s6)*100)/100 AS new_s4, 
  ROUND(s5/(s0+s1+s2+s3+s4+s5+s6)*100)/100 AS new_s5, 
  ROUND(s6/(s0+s1+s2+s3+s4+s5+s6)*100)/100 AS new_s6,
  pk_column 
  FROM myTable
)b ON (b.pk_column = a.pk_column)
SET a.s0 = b.new_s0, .... 

关于mysql - 用常量值更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20844103/

相关文章:

mysql - SQL : Make a sum query

mysql - 使用 Phinx Migrate 添加 'varbinary' MySQL 字段类型

php - 警告 : mysql_num_rows() expects parameter 1 to be resource, 中给出的 bool 值

mysql - 寻求软件建议外键

php - 如何使用 CodeIgniter 插入多个表

php - 如何使用 POST-SELECT 通过 API 调用 FLOWGEAR 工作流程

java - JWPL 访问维基百科时出现异常

php - SQL Left Join - 多次相同的结果

sql - SELECT 与 UPDATE,使用 ABS 函数时出现意外四舍五入

sql - 获取雪花数据仓库中插入的行的标识