MySQL将另一个查找值添加到求和值

MySQL将另一个查找值添加到求和值,mysql,aggregate-functions,Mysql,Aggregate Functions,实际的应用程序更复杂,但这里是我试图实现的一个简化版本 我有一个表,其中包含每个人(员工ID)需要求和的值(ResponseValue) 表A 我还有第二个表,其中包含每个Staff_ID和OT_期间的调整值 表B 我的MySQL查询成功地将第一个表中的值求和到一个名为“ShiftCount”的列中,但当我尝试向其中添加调整值时,ShiftCount变为Null 预期结果将是 +----------+------------+ | Staff_ID | ShiftCount | +-------

实际的应用程序更复杂,但这里是我试图实现的一个简化版本

我有一个表,其中包含每个人(员工ID)需要求和的值(ResponseValue) 表A

我还有第二个表,其中包含每个Staff_ID和OT_期间的调整值 表B

我的MySQL查询成功地将第一个表中的值求和到一个名为“ShiftCount”的列中,但当我尝试向其中添加调整值时,ShiftCount变为Null

预期结果将是

+----------+------------+
| 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
我错过了什么?谢谢

如果在列调整中添加表达式“COALESCE”无效

另外,我认为您需要在组中添加“a.OT_PeriodID”和“Adjustment”

试着这样做:

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

假设每次调整都是针对员工ID+加班周期对进行的:

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

您需要将调整中的
NULL
转换为0。另外,我认为您的查询不起作用,因为它不在
分组依据
。我只在表B中没有行时得到
ShiftCount=NULL
,因为您需要
合并(调整,0)
您还需要将
OT\u Period
放入
分组依据
,或者在其周围使用聚合函数。查询似乎很好。员工Id的咕噜声就足够了,因为这是唯一一个你的问题不清楚的领域。我们不知道桌子上的钥匙。我们不知道这些表是如何关联的。我们不知道你到底想补充什么。我们只能猜测。其工作原理与您的解决方案几乎相同,我只是使用了COALESCE来代替ifnull。我也错过了加入的条件和条件。没有这一点,它增加了调整,无论“OT_期”。谢谢一开始我以为这样行得通。我刚刚意识到,无论OT_周期如何,它都在添加调整。一旦我在另一个答案中@slaakso提到的连接中添加了AND条件,它就成功了。非常感谢。
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
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