当前位置: 首页 > 面试题库 >

在MySQL中使用SUM()更新

赫连坚
2023-03-14
问题内容

我的桌子:

ID名称费用PAR P_val S_val
1 X 5 0 1 0
1 Y5 0 2 0
1 z 5 0 0 5
2 XY 4 0 4 4

我需要PAR使用SUM(S_val),按ID分组来更新字段:

  • 对于ID 1,PAR应为SUM(SVAL) WHERE ID=1
  • 对于ID 2,PAR应为SUM(SVAL) WHERE ID=2

预期输出:

ID名称费用PAR P_val S_val
1 X 5 5 1 0
1年5 5 2 0
1 z 5 5 0 5     
2 XY 4 4 4 4

UPDATE该如何PAR看重?

我的代码

UPDATE Table_Name SET PAR = (SELECT SUM(S_val) FROM Table_Name WHERE ID=1) 
FROM   Table_Name

这是行不通的。


问题答案:

不幸的是,您无法在中更新与其自身联接的表MySQL

您需要创建一个函数作为解决方法:

DELIMITER $$

CREATE FUNCTION `fn_get_sum`(_id INT) RETURNS int(11)
READS SQL DATA
BEGIN
      DECLARE r INT;
      SELECT  SUM(s_val)
      INTO    r
      FROM    table_name
      WHERE   id = _id;
      RETURN r;
END $$

DELIMITER ;

UPDATE  table_name
SET     par = fn_get_sum(id)


 类似资料:
  • 我有两个表格:,带有数量和单价(id | name | order | id | qt | unit | price)和表格。 我想表格并放入,以获得订单的总价。 items表上的查询非常简单,可以很好地为同一订单id内的所有项目求和: 但是我不能在我的表中插入这个值。我不能让这个工作: 它返回 我在这里发现了一个非常类似的问题,但答案对我来说并不适用:

  • 问题内容: 这一点效果很好: 它将列中的所有字段组加在一起。 我遇到的麻烦是得到此结果来更新另一个表中的另一列。 这就是我所拥有的: 任何建议,不胜感激。 问题答案: 您不能在内部使用update语句。您需要使用子选择进行分组。 像这样的东西:

  • 问题内容: 假设我有这张桌子 我想返回第一行,其中所有先前现金的总和大于某个值: 因此,例如,如果我要返回第一行,其中所有先前现金的总和都大于500,则应返回到第3行 如何使用mysql语句执行此操作? 使用 不起作用 问题答案: 您只能在HAVING子句中使用聚合进行比较: 该子句要求您定义GROUP BY子句。 要获得第一行,其中所有先前现金的总和都大于某个值,请使用: 由于聚合函数发生在子查

  • 问题内容: 我正在尝试使用连接到MySQL数据库的ASP.NET创建GridView。数据如下所示。 根据上面的记录,我希望结果显示如下 我当前的代码如下。这给了我错误(关于DatabaseName.sum的内容不存在。请检查“函数名称解析和解析”部分…) 代码继续 Sum Case最好在这里使用吗? 问题答案: 该错误是由函数名称和括号之间的空格引起的 阅读更多函数名称解析和解析 尝试 这是 S

  • 问题内容: 这是我使用的代码 我试图在客户表中的TotalP字段中设置一个值x。值x等于“产品”表中“客户ID”相同的对应价格的总和。 上面的代码返回错误 问题答案: 您可以使用DSum: 但是,这确实引发了一个问题,即当可以从查询中获取信息时,为什么要使用计算值来更新表。

  • 问题内容: 如何将sql查询写入hibernate条件? 问题答案: 想我找到了答案。您必须使用Projection.sqlProjection()而不是Projections.sum()。例: