2016-07-05 7 views
1

これは私の最初の投稿です。したがって、書式/内容に対する一般的な修正も歓迎します。私は比較的新しいSQLです。ある列の値の合計と別の列の相対的な出現をカウントするSQLクエリ

私は、分類評価からテスト結果を収集するデータベースを持っています。私は、それぞれのテストで期待される結果が何であるかを知っています。また、テストが成功したかどうか、つまり返される期待値が期待値と一致したかどうかを示す列もあります。

Expected_Result Result Success 
    A     A  True 
    A     B  False 
    B     B  True 
    A     A  True 
    B     A  False 

私はSELECT Expected_Result, COUNT(Expected_Result) FROM Evaluation_Results GROUP BY Expected_Resultと各期待タイプの総出現を返すことができます知っている:それは次のようになります。 特定の予期される結果に対する誤検出の数をカウントする方法を知っていますSELECT COUNT(*) FROM Evaluation_Results WHERE Success = 'True' AND Expected_Result = 'A'

私は2つを組み合わせて苦労しています。テーブルあれば参加

Expected_Result  Total Num_Successful Success_Rate 
A     3   2    66.67 
B     2   1    50.00 

答えて

0

あなたは集約時に条件チェックを実行するためにCASE式を使用することができます。 caseステートメントは、条件付き結果を識別します。たとえば、あなたが使用できます。

基本的に
select evaluation_result 
, count(*) AS total 
, sum(case when success='true' and result='a' then 1 else 0 end) AS num_successful 
, sum(case when success='true' and result='a' then 1 else 0 end)/count(*) AS success_rate 
from evaluation_results group by evaluation_result; 

をあなたがして比率を実行し、条件付きの結果に基づいて、1または0の全学年のカウント(*)、和()取っているが、そこにある何が起こっているのか数学。ここに参加する必要はありません。 CASE Expressionは非常に多様な方法で使用できる強力な条件文です。

以上の柔軟なソリューションのためには、このを見て:

select evaluation_result 
, count(*) AS total 
, sum(case when success='true' and result=evaluation_result then 1 else 0 end) AS num_successful 
, sum(case when success='true' and result=evaluation_result then 1 else 0 end)/count(*) AS success_rate 
from evaluation_results group by evaluation_result; 
+0

大文字小文字の区別がない大文字小文字の区別。 – jarlh

+0

success_rateはすべての行に対して0として返されますか?また、なぜSuccessカラムがexpected_resultとすでに比較している場合にresultを使用するのですか? – Maps

+0

答えとして受け入れましたが、合計で 'result = evaluation_result'句を削除し、%success rateの除算の前に100.0を掛けました。おそらくあなたはあなたの答えを編集する必要があります。ありがとうございました。 – Maps

0

あなたは自己を使用することができます。私はそうのようにすべての異なる期待される結果のリストを返すために、クエリ、それぞれの合計、成功した結果の数、および合計の割合を、希望します同じようです。

SELECT distinct e.Expected_Result, COUNT(Expected_Result), sum(e1.columns name), avg(e1.column name) 
FROM Evaluation_Results e 
    left join Evaluation_Results e1 on e1.col=e.col 
GROUP BY e.Expected_Result 
+0

なぜSELECT DISTINCT? GROUP BYは重複を返しません。 – jarlh

-1

使用この単純なクエリと結果を確認する。..

select Expected_Result, count(Expected_Result) Total, 
sum(IF ('True' = Success, 1, 0)) Num_Successful, 
avg(IF ('True' = Success, 1, 0)) Success_Rate 
from Evaluation_Results group by Expected_Result 
関連する問題