簡體   English   中英

根據先前計算的字段計算MySQL Select字段

[英]Calculating MySQL Select field based on previously calculated field

所以我在MySQL中有一個電話客戶數據庫,該數據庫有兩個表customer_mastercall_data 兩個表都有一個customer_id字段,該字段將具有特定屬性的單個客戶編號匹配。 customer_master表具有客戶名稱,而call_data具有與唯一客戶ID相關聯的大量呼叫數據。 我需要創建一個查詢,其中查詢嘗試的本地呼叫的數量,然后根據呼叫事件獲得成功撥打的本地電話(不是掉線的電話)的數量並計算平均值。 call_data表具有一個call_event字段,我基本上需要在其中查找兩個不同的東西:a) local_call_failurelocal_call_success 我能夠創建一個查詢,在其中可以使用inner join來顯示具有userIDuser nametotal 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM