新列基于另一列的总和

时间:2018-12-29 20:03:35

标签: mysql stored-procedures triggers

大家好,我想根据另一列的总和创建一列 假设我有这张桌子

Employee
id      iddepartment    idhostel     valuedepartment    
1       1               1                   15              
2       2               1                   15              
3       3               1                   15              
4       4               2                   10              
5       5               2                   10              
6       6               2                   10              

我想用计算列创建另一个表(idhostel的sum valuedepartment group),看起来像这样

Employee
id      iddepartment    idhostel     valuedepartment            valuehostel   
1       1               1                   15                      45
2       2               1                   15                      45 
3       3               1                   15                      45
4       4               2                   10                      30
5       5               2                   10                      30 
6       6               2                   10                      30  

有什么办法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

您要在表中创建一个新列,然后从其他列中更新其内容:

ALTER TABLE my_table ADD COLUMN my_sum INT;

UPDATE my_table SET my_sum = value1 + value2;

在您的用例中,相关查询似乎是:

UPDATE my_table as t1
INNER JOIN (
    SELECT idhostel, SUM(valuedepartment) AS sum_dpt
    FROM my_table
    GROUP BY idhostel
) t2 on t2.idhostel = t1.idhostel
SET t1.valuehostel = t2.sum_dpt

答案 1 :(得分:0)

该示例表明,您希望每个valuedepartment的{​​{1}}之和。您可以使用子查询来获取。

idhostel

我不建议坚持这一点。您可以始终如上所示查询它,以便获取信息。持久地计算其他值会带来不一致的风险,但是应尽可能避免。否则,必须格外小心,以免出现不一致之处。

但是您可以使用可以像表一样查询的视图。

SELECT e1.id,
       e1.iddepartment,
       e1.idhostel,
       e1.valuedepartment,
       (SELECT sum(e2.valuedepartment)
               FROM employee e2
               WHERE e2.idhostel = e1.idhostel) valuehostel
       FROM employee e1;

然后您可以查询视图。

CREATE VIEW employees_with_valuehostel
AS
SELECT e1.id,
       e1.iddepartment,
       e1.idhostel,
       e1.valuedepartment,
       (SELECT sum(e2.valuedepartment)
               FROM employee e2
               WHERE e2.idhostel = e1.idhostel) valuehostel
       FROM employee e1;

将为您提供与上述查询相同的结果。