基于另一列的和的新列

mgdq6dx1  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(600)

嗨,伙计们,我想根据另一列的总和创建一列,假设我有这个表

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

我想创建另一个具有计算列(sum valuedepartment group by idhostel)的表,该表类似于

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

我有办法做到吗?

3gtaxfhh

3gtaxfhh1#

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

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
x4shl7ld

x4shl7ld2#

这个例子表明,你想要 valuedepartmentidhostel . 您可以使用子查询获得它。

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;

然后可以查询视图。

SELECT *
       FROM employees_with_valuehostel;

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

相关问题