-1

我想从每个时期的这些数据中计算 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%
4

2 回答 2

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

演示

于 2012-09-26T21:52:32.090 回答
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,您可能需要将整数值转换为小数才能查看小数值。

演示:http ://sqlfiddle.com/#!1/2ec4f/1

于 2012-09-26T22:01:12.680 回答