MySQL добавляет другое значение поиска к значению SUM - PullRequest
0 голосов
/ 04 октября 2019

Реальное приложение более сложное, но вот упрощенная версия того, что я пытаюсь выполнить.

У меня есть таблица, которая содержит значения, которые необходимо суммировать (ResponseValue) для каждого человека (Staff_ID) Таблица A

+----------+-----------+---------------+
| Staff_ID | OT_Period | ResponseValue |
+----------+-----------+---------------+
| 4        | 4         | 1             |
+----------+-----------+---------------+
| 6        | 4         | 1             |
+----------+-----------+---------------+
| 8        | 4         | 1             |
+----------+-----------+---------------+
| 2        | 4         | 1             |
+----------+-----------+---------------+
| 1        | 4         | 1             |
+----------+-----------+---------------+
| 11       | 4         | 1             |
+----------+-----------+---------------+
| 13       | 4         | 0             |
+----------+-----------+---------------+
| 45       | 4         | 1             |
+----------+-----------+---------------+
| 57       | 4         | 1             |
+----------+-----------+---------------+
| 63       | 4         | 1             |
+----------+-----------+---------------+
| 1        | 4         | 1             |
+----------+-----------+---------------+
| 2        | 4         | 1             |
+----------+-----------+---------------+
| 4        | 4         | 1             |
+----------+-----------+---------------+
| 6        |           |               |
+----------+-----------+---------------+
| 8        | 4         | 1             |
+----------+-----------+---------------+
| 11       | 4         | 1             |
+----------+-----------+---------------+
| 13       | 4         | 1             |
+----------+-----------+---------------+
| 45       | 4         | 1             |
+----------+-----------+---------------+
| 57       | 4         | 1             |
+----------+-----------+---------------+
| 63       | 4         | 0             |
+----------+-----------+---------------+

У меня есть вторая таблица, которая содержит значение корректировки для каждого Staff_ID и OT_Period. Таблица B

+----------+-----------+------------+
| Staff_ID | OT_Period | Adjustment |
+----------+-----------+------------+
| 1        | 4         | 2          |
+----------+-----------+------------+
| 11       | 4         | 1          |
+----------+-----------+------------+
| 13       | 4         | 0          |
+----------+-----------+------------+
| 45       | 4         | 5          |
+----------+-----------+------------+
| 57       | 4         | 4          |
+----------+-----------+------------+
| 63       | 4         | 2          |
+----------+-----------+------------+

Мой запрос MySQL успешно суммирует значения в первомтаблицы в столбец с именем «ShiftCount», но ShiftCount переходит к нулю, когда я пытаюсь добавить к нему значение корректировки.

Ожидаемый результат будет

+----------+------------+
| Staff_ID | ShiftCount |
+----------+------------+
| 1        | 4          |
+----------+------------+
| 2        | 2          |
+----------+------------+
| 4        | 2          |
+----------+------------+
| 6        | 1          |
+----------+------------+
| 8        | 2          |
+----------+------------+
| 11       | 3          |
+----------+------------+
| 13       | 1          |
+----------+------------+
| 45       | 7          |
+----------+------------+
| 57       | 6          |
+----------+------------+
| 63       | 3          |
+----------+------------+

Мой рабочий запрос для получениясумма равна

SELECT a.Staff_ID, a.OT_PeriodID, COALESCE(SUM(ResponseValue),0) AS ShiftCount
FROM TableA a
GROUP BY a.Staff_ID

Я попробовал следующее, и все значения ShiftCount обнуляются

SELECT a.Staff_ID, a.OT_PeriodID, COALESCE(SUM(ResponseValue),0)+Adjustment AS ShiftCount
FROM TableA a
LEFT JOIN TableB b
ON a.Staff_ID=b.Staff_ID
GROUP BY a.Staff_ID

Чего мне не хватает? Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Предполагается, что каждая корректировка выполняется для пары Staff_ID + OT_Period:

SELECT a.Staff_ID, ifnull(SUM(a.ResponseValue),0)+ifnull(b.Adjustment, 0) AS ShiftCount
FROM TableA a
  LEFT JOIN TableB b ON a.Staff_ID=b.Staff_ID and a.OT_Period=b.OT_Period
GROUP BY a.Staff_ID, b.Adjustment
0 голосов
/ 04 октября 2019

Если вы добавите выражение "COALESCE" в столбец, корректировка не работает?

Также я думаю, что вам нужно добавить "a.OT_PeriodID" и "Adjustment" в GROUP BY.

Попробуйте так:

SELECT a.Staff_ID, COALESCE(SUM(ResponseValue),0)+COALESCE(Adjustment,0) AS ShiftCount FROM TableA a LEFT JOIN TableB b ON a.Staff_ID=b.Staff_ID GROUP BY a.Staff_ID, Adjustment
...