如何根据 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
或者通过使用 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
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
或者通过使用 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