2017-03-03 67 views
0

我想etr%。如果是getter,則etr%find的邏輯是(request_Date-xetr),然後是etr然後是1 else 0.我想通過我的代碼計算成組%100% MINUTE,REQUEST_DATE,Xetr)< ETR然後1點否則爲0結束)* 100 /計數(1))爲ETR是否可能getter然後運算符在mysql中使用?

+0

'out of total'among ALL assignedid? – Sergey

+0

是所有已分配的id。我想計算百分比 – Sudip

回答

0

您應該使用SUM,而不是COUNT:

SUM(case when TIMESTAMPDIFF(MINUTE,Request_Date, Xetr) < etr then 1 else 0 end)*100/count(1) as etr 
+0

但仍然沒有運行代碼 – Sudip

+0

對不起,這是不必要的支架。現在再嘗試 – Sergey

+0

工作,但沒有得到實際的o/p。我想計算etr的%。如果TIMESTAMPDIFF(MINUTE,Request_Date,Xetr) Sudip

0

假設request_datexetr是DATETIME數據類型,並且etr是TIME數據類型...

我們可以在兩個DATETIME值之間獲得分鐘的差異,然後將其與從TIME數據類型派生的分鐘進行比較。 (我們需要做一次轉換,因爲整數與TIME數據類型的比較不太可能產生我們想要的結果。)

使用MySQL ADDTIME函數更簡單明瞭。我們可以將etr(TIME數據類型,時間量)添加到request_date(DATETIME),以返回DATETIME。我們可以很容易地與xetr(另一個DATETIME)進行比較。

例如:

ADDTIME(request_date , etr) > xetr 

我們應該測試這一點,驗證結果,之前我們認爲合併成一個聚合功能。把該條件測試到表達,我們得到:

COUNT(CASE ADDTIME(request_date,etr) > xetr THEN 1 END)/COUNT(1)*100 AS etr 

的括號似乎奇怪的放置,並沒有出現是合法的。這不是完全清楚你想達到什麼樣的,但我懷疑你正在尋找的是這樣的返回結果:

COUNT(CASE 
     WHEN TIMESTAMPDIFF(MINUTE,request_date,xetr) < etr 
     THEN 1 
     ELSE NULL 
     END 
) * 100/COUNT(1) AS etr 

還要注意,ELSE 0ELSE NULL取代。使用零而不是NULL,由CASE返回的值保證爲非NULL,因此每一行都將被計數,整個表達式的值將爲100或0.用NULL代替0看起來像它會更接近你想要達到的目標。


這只是一個猜測。

+0

SELECT Assignedto ,COUNT(Assignedto)如TC ,COUNT(CASE WHEN TIMESTAMPDIFF(分,REQUEST_DATE,xetr) Sudip

+0

先生我想從assignedto計算etr。如果 Sudip

+0

CASE表達式的結果將始終爲非NULL,所以它等同於COUNT(1),整個表達式的返回值將爲100或0.(我想我在我的答案中提到了這一點.ELSE 0需要被ELSE NULL替換) – spencer7593

相關問題