2012-08-29 505 views
1

希望能幫到你,這是推動我逼瘋了計算百分比

我需要計算的時間問題已經失敗的百分比,但這需要由被縮小地理區域和這些問題的產品被要求反對。

我:

$CA002 = "(SELECT ROUND(100 * (SELECT count(CA002Result) from Data_Table where (CA002Result='Fail'))/count(CA002Result),2) from Data_Table) AS 'CA002 %'"; 

其中 '作品',但只是針對計算整個組記錄作爲一個 '整體'

我想:

$CA001 = "(SELECT ROUND(100 * (SELECT count(CA001Result) from Data_Table where (CA001Result='Fail' AND Area ='$Area'))/count(CA001Result) from Data_Table WHERE (Area='$Area'),2) AS 'CA001 %'"; 

,也:

$CA001 = "(SELECT ROUND(100 * (SELECT count(CA001Result) from Data_Table where (CA001Result='Fail' AND Product='$product' AND Area='$Area'))  
    / count(CA001Result WHERE Product = '$product' AND Area='$Area'),2) from Data_Table) AS 'CA001 %'"; 

也嘗試這個,但得到一個MYSQL語法錯誤。

$CA001 = "(SELECT ROUND(100 * (SELECT count(CA001Result) from Data_Table where (CA001Result='Fail'))/ (SELECT (count(CA001Result) from Data_Table WHERE (Area='$Area')),2) AS 'CA001 %')"; 

無論我嘗試什麼,我都會得到錯誤,我似乎無法解決我需要放在哪裏。

嘗試以下答案:

$CA001 = "(SELECT 100 * SUM(IF(CA001Result='Fail', 1, 0))/COUNT(CA001Result) as 'CA001 %' WHERE Area='$Area')"; 

$CA002 = "(SELECT ROUND(100 * (SELECT count(CA002Result) from Data_Table where (CA002Result='Fail'))/count(CA002Result),2) from Data_Table) AS 'CA002 %'"; 

,但我得到了下面的錯誤:

MySQL錯誤:您的SQL語法錯誤; '(SELECT ROUND(100 *(SELECT count(CA002Result)from Data_Table where'(CA002Re'at line 1''))(對應於你的MySQL服務器版本的手冊,選擇正確的語法。)任何幫助非常感謝,謝謝。

編輯 - 破解它使用:

$CA001 ="ROUND ((SELECT 100 * SUM(IF(CA001Result='Fail', 1, 0))/COUNT(CA001Result) 
FROM Data_Table 
WHERE Area='$Area'),2) as 'CA001 %'"; 

感謝這麼多的幫助

+0

你應該包括你的表結構。此外,單詞包裝您的查詢,使他們更容易閱讀。 – Ariel

+0

表結構是將在每個記錄中寫入通過或失敗的問題(例如CA001Result)。這裏有一個Product列和Area列以及不同列中的員工姓名。我基本上試圖找出有關該產品(也從POST值中選擇)的問題總數的百分比,該百分比與該區域中的人員(從POST值中選擇)回答的人數有多少有關。 –

+0

你爲什麼要將查詢包裝在()中? - 在我看來,是什麼導致了例外。 –

回答

2

試試這個

SELECT 100 * SUM(IF(CA001Result='Fail', 1, 0))/COUNT(CA001Result) as 'CA002 %' 
FROM Data_Table 
WHERE '$product' AND Area='$Area' 
+0

剛剛嘗試過,但仍然出現錯誤,編輯了上面的問題以顯示我所得到的結果。 –

+0

好的,我只是在查詢中添加了一個FROM(它缺失),並嘗試了對現有MySQL數據庫的查詢變體,並且它似乎工作得很好。 –

+0

優秀!現在,我正確地爲我選擇了產品/區域,現在只需將它舍入到小數點後兩位,我將它添加到與上述示例類似的位置,但它又一次踢出了語法錯誤,所以也許這就是導致我的問題,你能建議在哪裏/如何把ROUND放入? –

0

我只是猜測你的模型,但你應該嘗試這種模式:

SELECT 
    Area, 
    Product, 
    COUNT(*) as total, 
    SUM(CA002Result='Fail') as total_fail, 
    SUM(CA002Result='Fail')/COUNT(*) as 'CA002 %' 
FROM Data_Table 
GROUP BY Area, Product;