[英]mysql trigger calculating age by using DOB field and autostore category based on calculated age to Database
[英]Calculating MySQL Select field based on previously calculated field
所以我在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
挑選本地呼叫來獲得總嘗試次數的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
除以計算平均值,那call_success/tota_call_attempts
我所需要的! 用任何其他語言,這將花費我一個循環和五分鍾,但是SQL似乎要困難得多。 我需要在同一個查詢中完成兩個計算,並將它們並排打印出來,然后再對平均值進行計算。 如何做到這一點? 根據我的能力,設置類似@var_name := COUNT(CM.call_event)
變量,然后使用該變量在SELECT
語句中再次執行計算在SQL中是不行的。
誰能幫我這個? 我將永遠在你的債務中!
使用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;
在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`;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.