大家好,我想根据另一列的总和创建一列 假设我有这张桌子
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
有什么办法可以做到这一点?
答案 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;
将为您提供与上述查询相同的结果。