如何根据 aspirasi_id 计算百分比

How to calculate percentages, based on aspirasi_id

Select aspirasi_id
     , aspirasi_option_id
     , (Count(aspirasi_option_id)* 100 / 
           (Select Count(*) 
              From aspirasi_choices)
       ) as total 
  From aspirasi_choices  
 GROUP 
    BY aspirasi_option_id

输出

wrong value

我怎样才能使per卡,他的total各不在join中。

例子 true value

之前感谢

table

my expectations
aspirasi_id     | aspirasi_option_id | total 
---------+----------+-------
 52             | 6        |  100.00% 
 53             | 5        |  50.00% 
 53             | 4        |  50.00% 
 
Reality 
aspirasi_id     | aspirasi_option_id | total 
---------+----------+-------
 52             | 6        |  33.33% 
 53             | 5        |  33.33% 
 53             | 4        |  33.33% 

我想你需要按 aspirasi_id 除以百分比,在你的子查询中添加一个 where 子句,如 WHERE aspirasi_id = a.aspirasi_id

SELECT 
  a.aspirasi_id,
  a.aspirasi_option_id,
  (
    COUNT(aspirasi_option_id) * 100 / 
    (SELECT 
      COUNT(*) 
    FROM
      aspirasi_choices 
    WHERE aspirasi_id = a.aspirasi_id)
  ) AS total 
FROM
  aspirasi_choices a 
GROUP BY a.aspirasi_id,
  a.aspirasi_option_id 

Demo

或者通过使用 join,您可以将上面的内容重写为

SELECT 
  a.aspirasi_id,
  a.aspirasi_option_id,
  COUNT(aspirasi_option_id) * 100 / b.inner_total AS total 
FROM
  aspirasi_choices a 
  JOIN (SELECT 
      aspirasi_id,
      COUNT(*) AS inner_total 
    FROM
      aspirasi_choices 
    GROUP BY aspirasi_id) b USING (aspirasi_id) 
GROUP BY a.aspirasi_id,
  a.aspirasi_option_id 

Demo