mysql - 根据先前计算的字段计算 MySQL Select 字段
问题描述
所以我在 MySQL 中有一个电话客户数据库,该数据库有两个表,customer_master
并且call_data
. 这两个表都有一个customer_id
字段,该字段将单个客户编号与某些属性相匹配。该customer_master
表具有客户姓名,并且call_data
具有与唯一客户 ID 关联的大量呼叫数据。我需要创建一个查询,在其中获取尝试的本地呼叫次数,然后根据呼叫事件计算成功拨打本地呼叫(未掉线)的次数并计算平均值。该call_data
表有一个call_event
字段,我基本上需要在其中查找两个不同的东西 a)local_call_failure
和local_call_success
. 我可以创建一个查询,我可以在其中使用 aninner 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)
再次执行计算是 SQL 中的禁忌。SELECT
谁能帮我这个?我会永远欠你的!
解决方案
使用 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;
推荐阅读
- flutter - 使用 Package flutter_webview_plugin 获取旧的滚动偏移量
- postgresql - 列索引超出范围:2,列数:1 更新 jsonb 列时出错
- c# - 在等待异步完成之前函数返回
- python - 将 ID 与一组不同的名称匹配
- reactjs - 在网格中定位元素的更好方法
- appium-android - 在可点击元素上启动时,Appium 无法在 Android App 中滚动
- manim - 如何获取已经确定的图表上某个点的坐标?
- algorithm - 寻找 64 位以上数字的快速确定素性测试
- django - Vue PWA 登录在开发中有效,但在生产中返回 401
- javafx - 选择显示在 JavaFX 8 中的 treeTableView 中的第一项