我在MySQL数据库中有一个表(只是示例)
CREATE TABLE test.Names (
id INT NOT NULL ,
salary INT NULL ,
name VARCHAR(45) NULL ,
tmpl INT,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `id_UNIQUE` (`id` ASC)
);
我有这些记录
id, salary, name, tmpl
1, 10, John, null
2, 20, Pat, null
3, 30, Jane, null
我想通过每个人的简单计算来更新表格
salary of each person/Sum(salary)*100
所以结果应该是
id, salary, name, tmpl
1, 10, John, 16.67
2, 20, Pat, 33.33
3, 30, Jane, 50
如何通过一个SQL查询执行此操作?或者什么是最好的方法(我假设真实的表将有> 100 000行)
答案 0 :(得分:2)
使用单独的SELECT语句获取总薪水 - 将其放入变量中,或者将其与现有表交叉连接。然后,您可以获得每条记录的总和。
此SQL代码足以:
SET @sum_salaries = (SELECT SUM(salary) FROM test.Names);
UPDATE test.Names
SET tmpl = salary/@sum_salaries * 100;
甚至不需要加入。这种方式更简单,可能更快。
答案 1 :(得分:1)
试试这个:
SET @SallarySum = (SELECT SUM(salary) FROM TableName);
UPDATE Names t1
INNER JOIN
(
SELECT id, (Salary / @SallarySum) * 100 tmpl
FROM Names
) t2 ON t1.Id = t2.Id
SET t1.tmpl = t2.tmpl;
答案 2 :(得分:0)
试试这个:
update `test`.`Names`
set tmpl = salary / (select sum(salary) from `test`.`Names`) * 100
where tmpl is null --for multiple times execution
您可能必须将tmpl列更改为double数据类型。