[英]SQL query to count total ocurrences of values in one column and relative occurrence in another column
這是我的第一篇文章,因此也歡迎對格式/內容進行任何常規更正。 我對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
如果表相同,則可以使用自連接。
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
您可以在聚合過程中使用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表達式是一個功能強大的條件語句,可以以多種方式使用。
或者,要獲得更靈活的解決方案,請查看以下內容:
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;
使用此簡單查詢並檢查結果。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.