【问题标题】:How to get sum of a column in a table (for a particular employeeID) and store that in another column in another table?如何获取表中列的总和(对于特定的employeeID)并将其存储在另一个表的另一列中?
【发布时间】:2016-11-23 18:49:49
【问题描述】:

我有两个表,“员工”和“费用”

Employees 表有两列“EmployeeID(PK)”和“Expense_Total”

Expenses 有两列“EmployeeID”和“Expense”。 请注意,此处的 EmployeeID 不是 PK,因为一名员工可能有很多费用。我想找到所有员工的总和,然后将其插入到“员工”表中的“Expense_Total”列中,针对每个员工。这个怎么做?我尝试了以下方法:

            PreparedStatement ps1 = con.prepareStatement("UPDATE payroll_system.Employees emp JOIN payroll_system.Expenses exp ON emp.employeeID = exp.employeeID SET emp.Expense_Total = //I need the sum here//");

【问题讨论】:

    标签: java mysql sql


    【解决方案1】:

    我认为您已尝试以下查询。

    如果您第一次插入意味着您在 Employess 表中没有记录,那么您可以使用此插入查询来插入费用总额:

    INSERT INTO `employees`(id,expense_total) SELECT emp_id, SUM(expense) FROM expenses GROUP BY emp_id
    

    如果您已经有数据进入员工,那么您需要对员工表执行更新查询:

    UPDATE employees emp SET emp.expense_total = (SELECT SUM(expense) FROM expenses WHERE emp_id = emp.id)
    

    请试试这个。

    您可以在这里查看:http://sqlfiddle.com/#!9/3f4d67

    【讨论】:

    • 嗨哈迪克,非常感谢,但由于某种原因它无法正常工作。
    • 有什么问题?
    【解决方案2】:
    UPDATE
      Employees em
      LEFT JOIN(
        SELECT
          e.employeeID AS employeeID,
          SUM(e.expense) AS totAmnt
        FROM
          Expense e
        GROUP BY
          e.employeeID) AS t
        ON t.employeeID = em.employeeID
    SET
      em.Expense_Total = IFNULL(t.totAmnt,0);
    

    再见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2022-07-31
      相关资源
      最近更新 更多