【问题标题】:New column based on the sum of another column基于另一列总和的新列
【发布时间】:2018-12-29 20:03:35
【问题描述】:

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

员工 id iddepartment idhostel 价值部门 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 计算值部门组的总和)

员工 id iddepartment idhostel value 部门值hostel 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

请问有什么办法可以做到吗?

【问题讨论】:

  • 您好,谢谢您的回复,是的,我检查了您的链接,但问题是我们可以执行一些数学运算来存储列,但是如果我们想要一些聚合函数,如平均值或总和,则会出现问题
  • 我猜 value hostel 是 valuedepartment by id hostel 的总和,但我可能是错的,你没有定义。
  • 或 value department = valuhostel / 3 或 id hostel 是基于 value department 和 value hostel 相同位置的序列号
  • Salomon 我更新了我的问题,希望现在清楚了!!

标签: mysql stored-procedures triggers


【解决方案1】:

该示例表明,您需要 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;

会给您与上述查询相同的结果。

【讨论】:

  • 这是我想要的结果,非常感谢!!但是可以将结果存储在单独的列中??
  • @HoussamZakariaAddad:正如我所写,我不建议保留 vales。但是你可以使用视图。查看我的编辑。
  • 我真的很感谢你的帮助!你的解决方案是我想要的,但问题是我在另一个程序(一个 spring boot 程序)中使用这个表,所以视图不是我应该采用的正确路径我有一个已经有这些列的 mysql 表(id​​-iddepartment -idhostel -valuedepartment),我想创建另一列,另一列是 valuehostel !抱歉,如果我一开始就没有说清楚
【解决方案2】:

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

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

【讨论】:

  • 是的,这就是我想要的,但不是将 value1 和 value2 作为列,我希望它们作为行更新 my_table set my_sum = sum(value1);类似的东西。
  • @HoussamZakariaAddad :嗯,不确定这是否有意义...请更新您的问题以显示预期结果...
  • 我真的很感谢你的帮助! )ld 假设我有一个 mysql 表,其中已经有这些列 (id-iddepartment-idhostel -valuedepartment),我想创建另一列 valuehoste,其中包含由 idhostel l 分组的 valuedepartment 的总和!对不起,如果我一开始就没有说清楚
  • 是的,它看起来像那样,但问题是您的解决方案也更新了 valuedepartment
猜你喜欢
  • 2019-10-15
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多