这是我的第一篇文章,因此欢迎对格式/内容进行任何一般性更正。我对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
答案 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