簡體   English   中英

SQL查詢來統計一列中值的總出現次數以及另一列中的相對出現次數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM