使用Teradata按组计算百分比

问题描述

我正在尝试创建一个表,该表显示取决于指示器的每个状态的计数百分比。

这是我用来创建新表的数据集的示例。

+-------------+-------+-------+
|  Indicator  | State | Count | 
+-------------+-------+-------+
| Registered  | CA    |    25 |
| Registered  | FL    |    12 |
| Total       | CA    |    50 |
| Total       | FL    |    36 |
+-------------+-------+-------+

我正在尝试创建一个新表,该表将为每个对应的行设置一个百分比,如下所示:

+-------------+-------+-------+------------+
|  Indicator  | State | Count | Percentage |
+-------------+-------+-------+------------+
| Registered  | CA    |    25 |         50 |
| Registered  | FL    |    12 |       33.3 |
| Total       | CA    |    50 |          . |
| Total       | FL    |    36 |          . |
+-------------+-------+-------+------------+

到目前为止,我已经尝试过执行以下查询

select indicator,state,count,case when (select count from table where indicator='Registered') * 100 / (select count from table where indicator='Total')
when indicator = 'Total' then . end as Percentage

from table;

这不起作用,因为我收到一个错误:“子查询评估了多个行。”我猜是因为我没有考虑在when语句的情况下的状态,但是我不确定该如何处理。

什么是最好的方法

解决方法

您可以使用窗口功能:

"endDate"
,

只需将桌子与自己连接起来即可。

OrderID