Как получить сумму столбца в таблице (для определенного employeeID) и сохранить это в другом столбце в другой таблице?

У меня есть две таблицы: "Сотрудники" и "Расходы",

Таблица Employees имеет две колонки "EmployeeID (PK)" и "Expense_Total"

Расходы имеют две колонки "EmployeeID" и "Expense". Обратите внимание, что EmployeeID здесь не является ПК, поскольку у одного сотрудника может быть много расходов. Я хочу найти общую сумму для всех сотрудников, а затем вставить ее в столбец "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//");
0
20 июля '16 в 16:35
источник поделиться
2 ответов

Я думаю, вы попробуете выполнить запрос.

Если вы вставляете первое время, значит, у вас нет записей в таблице Employess, чем вы можете использовать этот запрос вставки для вставки Expense total:

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

Если у вас уже есть данные в Employees, чем вам нужно выполнить Update Query в таблице Employees:

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

Пожалуйста, попробуйте это.

Вы можете проверить здесь: http://sqlfiddle.com/#!9/3f4d67

1
20 июля '16 в 16:40
источник
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);

до свидания

0
20 июля '16 в 16:47
источник

Посмотрите другие вопросы по меткам или Задайте вопрос