SQL查询计算一列中值的总发生次数和另一列中的相对发生次数

时间:2016-07-05 08:56:34

标签: mysql 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'

计算特定预期结果的错误检测数

我正在努力将两者结合起来。我希望查询返回所有不同预期结果的列表,每个结果的总数,成功结果的数量以及总数的百分比,如下所示:

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用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;

答案 2 :(得分:-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