2017-03-03 91 views
1

我有一張考試表格,裏面有詳細信息,例如總數(參加考試的學生人數),失敗(考試中失敗的學生人數)和日期如下所示使用MySQL查找通過的數量和百分比

id key value date 
1 total 400 2017-02-28 
2 failed 200 2017-02-28 
3 total 350 2017-02-27 
4 failed 180 2017-02-27 
5 total 500 2017-02-26 
6 failed 250 2017-02-26 
7 total 600 2017-02-25 
8 failed 200 2017-02-25 
9 total 400 2017-02-24 
10 failed 100 2017-02-24 

我在MySQL中編寫了很多聚合查詢,但現在我需要使用單個查詢來獲得如下所示的結果。

我們如何計算兩行的通過百分比?

id total failed passed passed percentage date 
1 400 200 200 50%    2017-02-28 
2 350 180 170 48.57%   2017-02-27 
3 500 250 250 50%    2017-02-26 
4 600 200 400 66.67%   2017-02-25 
5 400 100 200 75%    2017-02-24 

任何人都可以請幫我在這

+1

編輯你的問題,包括你的嘗試。 –

回答

2

如:

SELECT date 
    , SUM(CASE WHEN attribute = 'total' THEN value END) total 
    , SUM(CASE WHEN attribute = 'failed' THEN value END) failed 
    , SUM(CASE WHEN attribute = 'total' THEN value END) - SUM(CASE WHEN attribute = 'failed' THEN value END) passed 
    , 100 - SUM(CASE WHEN attribute = 'failed' THEN value END)/SUM(CASE WHEN attribute = 'total' THEN value END) * 100 pct_passed 
    FROM my_table 
GROUP 
    BY date; 
1

假設date關係的行在一起,你可以使用聚合:

select (@rn := @rn + 1) as id, total, failed, (total - failed) as passed, 
     (1 - failed/total) as passed_rate 
from (select , date, 
      sum(case when key in ('total') then value else 0 end) as total, 
      sum(case when key = 'failed' then value else 0 end) as failed 
     from t 
     group by date 
    ) t cross join 
    (select @rn := 0) params 
order by date; 
+0

感謝您的回覆,但我得到異常,因爲我沒有'通過'在'鍵列下 –

+0

我也沒有得到正確的傳遞值 –

+0

@AlexMan。 。 。我不知道爲什麼我認爲價值觀是「通過」和「失敗」而不是「全面」和「失敗」。我認爲使用子查詢的上述公式修復了這些問題。 –