2

我在 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 行)

4

3 回答 3

2

使用单独的 SELECT 语句来获取总工资 - 将其放入变量中,或将其与现有表交叉连接。然后你就有了每条记录的可用总和。

这段 SQL 代码就足够了:

SET @sum_salaries = (SELECT SUM(salary) FROM test.Names);

UPDATE test.Names
SET tmpl = salary/@sum_salaries * 100;

甚至不需要加入。这种方式更简单,可能更快。

于 2012-09-30T22:57:37.110 回答
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;

这是一个SQL Fiddle 演示

于 2012-09-30T22:57:57.610 回答
0

尝试这个:

update `test`.`Names`
 set tmpl = salary / (select sum(salary) from `test`.`Names`) * 100
where tmpl is null --for multiple times execution

您可能必须将 tmpl 列更改为 double 数据类型。

于 2012-09-30T22:54:54.630 回答