首页 > 解决方案 > 根据先前计算的字段计算 MySQL Select 字段

问题描述

所以我在 MySQL 中有一个电话客户数据库,该数据库有两个表,customer_master并且call_data. 这两个表都有一个customer_id字段,该字段将单个客户编号与某些属性相匹配。该customer_master表具有客户姓名,并且call_data具有与唯一客户 ID 关联的大量呼叫数据。我需要创建一个查询,在其中获取尝试的本地呼叫次数,然后根据呼叫事件计算成功拨打本地呼叫(未掉线)的次数并计算平均值。该call_data表有一个call_event字段,我基本上需要在其中查找两个不同的东西 a)local_call_failurelocal_call_success. 我可以创建一个查询,我可以在其中使用 aninner join来显示我的表,其中包含userIDuser nametotal local attempts,但是我不知道如何使用计算出的尝试值来计算本地呼叫成功平均值。以下是我通过根据以下内容选择本地呼叫来获得总尝试次数的方法call_event

SELECT customer_id,
CONCAT(name_first, ' ', name_last) AS 'Customer Name',
COUNT(CM.call_event) AS 'Total Local Attemps'
FROM customer_master CM
INNER JOIN call_data CD ON CM.customer_id = CD.customer_id
AND ((call_event = 'local_call_failure')
     OR (call_event = 'local_call_success') )
GROUP BY customer_id;

现在我可以创建另一个查询来计算通过使用上面相同的想法发出的总成功本地调用,除了在AND语句中,只包括call_event = 'local_call_success'. 如果我能以某种方式弄清楚如何独立完成这些,然后通过除以计算平均值call_success/tota_call_attempts,这就是我所需要的!在任何其他语言中,这将花费我一个循环和五分钟,但 SQL 似乎要困难得多。我需要在同一个查询中完成这两个计算,并将它们并排打印出来,然后为平均值创建另一列。如何实现?从我收集到的信息来看,设置一个变量,然后使用该变量在您的语句中@var_name := COUNT(CM.call_event)再次执行计算是 SQL 中的禁忌。SELECT

谁能帮我这个?我会永远欠你的!

标签: mysqlsqlsubqueryinner-join

解决方案


使用 sql server 语法,我相信它会非常接近:

select customer_id, CONCAT(name_first, ' ', name_last) AS 'Customer Name', 
COUNT(CM.call_event) AS 'Total Local Attemps',
sum(case when call_event = 'local_call_success' then 1 else 0 end) as 'Success Events',
sum(case when call_event = 'local_call_success' then 1 else 0 end)/COUNT(CM.call_event) as SuccesstRate
from customer_master CM
INNER JOIN call_data CD ON CM.customer_id = CD.customer_id
AND ((call_event = 'local_call_failure')
    OR (call_event = 'local_call_success')
    )
group by customer_id;

推荐阅读