所以我在 MySQL 中有一个电话客户数据库,该数据库有两个表,customer_master
和 call_data
。这两个表都有一个 customer_id
字段,该字段匹配具有特定属性的单个客户编号。 customer_master
表包含客户姓名,call_data
表包含大量与唯一客户 ID 关联的通话数据。我需要创建一个查询,从中获取尝试的本地调用次数,然后根据调用事件调用成功的本地调用次数(而非掉线)并计算平均值。 call_data
表有一个 call_event
字段,我基本上需要在其中寻找两个不同的东西 a) local_call_failure
和 local_call_success
.我可以创建一个查询,我可以在其中使用 inner join
来显示我的表,其中包含 userID
、user name
和 total 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)
这样的变量,然后使用该变量在您的 SELECT
中再次执行计算> 语句在 SQL 中是禁忌。
谁能帮我解决这个问题?我会永远欠你的债!
最佳答案
在 MySQL 中,您可以:
select cm.customer_id,
concat(cm.name_first, ' ', cm.name_last) AS `Customer Name`,
count(*) as total_attempts,
sum( cd.call_event = 'local_call_failure' ) as num_failures,
sum( cd.call_event = 'local_call_failure' ) / count(*) as failure_rate
from customer_master cm join
call_data cd
on cm.customer_id = cd.customer_id and
cd.call_event in ('local_call_failure', 'local_call_success')
group by customer_id, `Customer Name`;
关于mysql - 根据之前计算的字段计算MySQL Select字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51605862/