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