我有一个查询可以正确返回所有内容,除了我的总列(总和)中的一个略有不一致之外,我无法弄清楚为什么会发生这种情况或有更好的方法来处理它。
这是有问题的查询部分:
SELECT
c.extension
,RESPONSIBLEUSEREXTENSIONID
, sum(Duration) -- seconds
, round(sum(Duration) / 60,2) -- minutes
, sum(if(LEGTYPE1 = 1,1,0)) -- outbound
, sum(if(LEGTYPE1 = 2,1,0) and ANSWERED = 1) -- inbound
, sum(if(Answered = 1,0,1)) -- missed
, count(if(LEGTYPE1 = 1,1,0)) + count(if(LEGTYPE1 = 2,1,0)) -- as total_calls
, now()
, b.ts
FROM cdrdb.session a
INNER JOIN cdrdb.callsummary b
ON a.NOTABLECALLID = b.NOTABLECALLID
INNER join cdrdb.mxuser c
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
WHERE b.ts BETWEEN curdate() - interval 30 day and curdate()
AND c.extension IN (7276,7314,7295,7306,7357,7200,7218,7247,7331,7255,7330,7000,7215,7240,7358,7312)
group by DATE(b.ts),c.extension;
这是前几个结果:
总呼叫列应添加呼入、呼出和未接电话。可以看到,大多数时候,总数是正确的,但尤其是第一行和第三行,它是关闭的。如果我给公式AS
别名并尝试对别名求和,它会说该列不存在。
是否有我遗漏的东西导致不一致,更重要的是,有没有更直接的方法可以对这 3 列/值求和?
您将总呼叫数定义为呼入、呼出和未接呼叫的总和,但在您的查询中您只包含以下 3 个术语中的 2 个:
count(if(LEGTYPE1 = 1,1,0)) + count(if(LEGTYPE1 = 2,1,0))
此外,使用COUNT
那里可能不是您想要的。这只会计算记录数,假设所有值都不是NULL
。相反,只需使用SUM
以下方法对三种类型的呼叫总和进行求和:
在计算总调用次数时使用SUM
,而不是COUNT
:
SUM(IF(LEGTYPE1 = 1, 1, 0)) + -- outbound
SUM(IF(LEGTYPE1 = 2, 1, 0) AND ANSWERED = 1) + -- inbound
SUM(IF(Answered = 1, 0, 1)) AS total_calls -- missed
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句