簡體   English   中英

通過Postgresql計算正確的匯率

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

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