我想从每个时期的此数据计算SQL中的结果百分比。
Period Result
1 Green
1 Blue
1 Blue
1 Red
1 Blue
1 Blue
1 Blue
2 Green
2 Green
2 Green
2 Blue
2 Red
2 Red
预期结果..
Period Result Percentage
1 Blue 72%
1 Green 9%
1 Red 9%
2 Blue 17%
2 Green 50%
2 Red 33%
答案 0 :(得分:2)
COUNT
首先Period
,再次将结果与原始表一起加入,按Period
和Result
分组,然后进行除法以获得百分比:
SELECT t.Period, t.Result, ((COUNT(t.Result) / Cnt) * 100) Percentage
FROM table t
INNER JOIN (SELECT Period, COUNT(*) Cnt
FROM table
GROUP BY Period) period_cnt
ON t.Period = period_cnt.Period
GROUP BY t.Period, t.Result
您可能需要调整舍入,并使用CONCAT
将字符%
添加到输出中,但这应该相当容易。
此外,第一个时段的平均值是错误的,它应该加起来为100
。绿色和红色应具有值14
。
<强> DEMO 强>
答案 1 :(得分:1)
像这样(ANSI SQL):
select period,
result,
(count(result) / total_period) * 100 as result_percent
from (
select period,
result,
count(*) over (partition by period) as total_period
from periods
) as t
group by period, total_period, result
order by period, result;
根据您的DBMS,您可能需要将整数值转换为小数,以便查看小数值。