[英]Calculate correct rate via postgresql
這是表格result
的數據:
question_id is_correct count
64 TRUE 11
66 FALSE 20
77 FALSE 15
77 TRUE 9
我需要計算正確的比率,等於(TRUE_COUNT)/(TRUE_COUNT+FALSE_COUNT)
。 現在的問題是某些問題缺少TRUE或FALSE數據,我想用零填充它以便進行self join
運算和計算。 有什么辦法可以滿足要求或填零? 萬分謝意!
預期結果:
question_id correct_rate
64 1
66 0
77 0.625
無需自我加入,您可以進行條件聚合:
select
question_id,
-- to return a percentage
100.0 *
max(case when is_correct = TRUE then count else 0 end) /
sum(count)
-- otherwise needs to add a cast if "count" is an INT
-- max(case when is_correct = TRUE then count else 0 end) /
-- cast(sum(count) as decimal(5,4))
from tab
group by question_id
條件聚合是正確的,但有一些細微差別:
SELECT
question_id
,SUM(CASE WHEN is_correct THEN count ELSE 0 END)
/(CASE WHEN SUM(count) < 1 THEN 1 ELSE SUM(count) END)::NUMERIC
FROM
result
GROUP BY
question_id
確保您不會被0除(如果是0/0),並且確保將其轉換為小數或數字以得到所需的比率。
另請注意,您所希望的.625結果與77相對應的結果不正確,即為.375 9 true / 24
您完全不需要JOIN
。 請查看以下有關如何有條件地匯總數據的信息:
SELECT
question_id,
COALESCE(SUM(count) FILTER(WHERE is_correct),0) / SUM(count)::NUMERIC AS rate
FROM
result
GROUP BY
question_id;
-- Older version of PostgreSQL without FILTER:
SELECT
question_id,
COALESCE(SUM(CASE WHEN is_correct THEN count END),0) / SUM(count)::NUMERIC AS rate
FROM
result
GROUP BY
question_id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.