2012-07-02 105 views
0

我的sql查詢獲取固件的錯誤修復驗證列表,例如, def-456是要求我測試產品固件測試的票據。 def-456有幾個子任務正在記錄結果。結果記錄爲:id:abc-123,abc-124,abc-125等(如下表所示)。這些相應的ID有「通過」或「失敗」的結果。我需要計算兩個值----> 1.嘗試次數:在下面的例子中嘗試次數是3/5,有3次通過和2次失敗(即通過/通過+失敗),在這裏我可以使用count()方法但不知道如何追加「/ 5」和 2.第一次嘗試成功率:在下面的例子中,abc-123失敗,但是abc-124通過,abc-125失敗,但abc-126通過,abc-126 -127通過沒有任何失敗,意味着我的成功率是:1出3(即1/3),我怎樣才能在sql中顯示這些值?這有點棘手,我無法找到這個邏輯。SQL:計算出現在輸出列上的出現次數並根據出現次數計算一些百分比

這裏是我的DEF-456數據:

value | id| 
    -------------- 
    fail | abc-123 
    pass | abc-124 
    fail | abc-125 
    pass | abc-126 
    pass | abc-127 

,這裏是O/P我試圖顯示:

id | value | attempts| %for attempts | 1st attempt 
---------------------------------------------------- 
abc-123 fail | 3/5 | 60%    | 1/3 
abc-124 pass | 3/5 | 60%    | 1/3 
abc-125 fail | 3/5 | 60%    | 1/3 
abc-126 pass | 3/5 | 60%    | 1/3 
abc-127 pass | 3/5 | 60%    | 1/3 
+0

什麼查詢/查詢hav你已經試過了嗎? –

+1

嗨獵人:這是我的嘗試:http://sqlfiddle.com/#!2/02a26/1 – yokoyoko

回答

3

我相信這是你所需要的:

SELECT 
    a.id, 
    a.resolution, 
    b.* 
FROM 
    Table1 a 
CROSS JOIN 
    (
     SELECT 
      CONCAT(SUM(aa.resolution = 'pass'), '/', COUNT(*)) AS attempts, 
      CONCAT((SUM(aa.resolution = 'pass')/COUNT(*)) * 100, '%') AS percent_attempts, 
      CONCAT(SUM(bb.mindate IS NOT NULL AND resolution = 'pass'), '/', SUM(resolution = 'pass')) AS first_attempt 
     FROM 
      Table1 aa 
     LEFT JOIN 
      (
       SELECT 
        MIN(`date`) AS mindate 
       FROM 
        Table1 
      ) bb ON aa.`date` = bb.mindate 
    ) b 

SQLFiddle Link

+0

感謝Zane發表評論。在您發佈的代碼中,解析是通過,失敗,失敗,失敗,失敗,通過。計算第一次成功率的邏輯是:如果代碼遇到傳遞第一行計數器爲1,那麼如果它遇到失敗保持計數器1,遇到通過失敗後仍然計數器應該是1,但是如果之後有通過通過然後櫃檯應該是2.在上面例如。成功率是第一次成功率是:1/6 – yokoyoko