2013-06-24 145 views
0

我正在嘗試生成一個MySQL表,其中包含一列顯示一個計數與另一個計數相同的百分比。總體而言,我想將以下兩個查詢合併爲一個顯示百分比而不是顯示計數的查詢。下面是這兩個疑問:計算MySQL查詢中的百分比

SELECT machine, COUNT(machine) 
FROM rtcdb.session 
WHERE project = "CSC032" 
    AND (qc_gsr = 'green' 
    AND qc_hr = 'green' 
    AND qc_acz = 'green' 
    AND qc_bre = 'green' 
) 
GROUP BY machine; 

&

SELECT machine, COUNT(machine) 
FROM rtcdb.session 
WHERE project = "CSC032" 
GROUP BY machine; 

有場景中的第一個查詢會產生小於第二行 - 當有沒有任何成功的機器(果嶺出現這種情況)。我如何將這些查詢合併爲一個計算所有成功機器的百分比(本質上,成功率),並將其顯示在自己的列中?

回答

0

類似的東西

SELECT 
    machine 
, COUNT(DISTINCT machine) AS "nb" 
, COUNT(DISTINCT 
    IF(qc_gsr = "green" 
    AND qc_hr = "green" 
    AND qc_acz = "green" 
    AND qc_bre = "green" 
    ), machine, NULL) 
) AS "green_nb" 
, COUNT(DISTINCT 
    IF(qc_gsr = "green" 
    AND qc_hr = "green" 
    AND qc_acz = "green" 
    AND qc_bre = "green" 
    ), machine, NULL) 
)/COUNT(machine) * 100 AS "%" 
FROM rtcdb.session 
WHERE project = "CSC032" 
GROUP BY machine 
; 
+0

感謝您的幫助,真的很感激。您所寫的查詢將我置於正確的方向,但不幸的是計算出不準確的值(我不確定的原因)。看起來你的查詢正在產生比實際應該高得多的百分比。例如,與其中一臺機器的green_nb計數相比,它提出了11,這是該機器的總計數。看起來green_nb的數字會出現一個總數等於或略低於總數的數字。有任何想法嗎? – jakelaz

+0

也許你應該使用'DISTINCT'。但是我不明白的是,如果你通過'machine'來計算'machine'和group,它應該總是返回1.你能提供一個[SQLFiddle](http://sqlfiddle.com/)嗎? –

+0

我想通了!這是我現在有: – jakelaz

0

只是讓你知道的技術,另一種方法是使用現有的查詢,子查詢中類似如下(未測試):

select machine, total.count, green.count, green.count*100/total.count as percentage 
    from (<subquery1>) green, (<subquery2>) total right join by green.machine=total.machine` 

您需要在子查詢中別名count(machine)count