我有一个查询,该查询返回多个EVENT_ID的结果。我想为每个SELECTION-ID计算每个EVENT_ID的总PPWAP的百分比PPWAP。
这是单个EVENT_ID结果的示例:
有人可以建议如何做到吗?
谢谢
答案 0 :(得分:1)
我认为您将需要使用子查询来获取每个SELECTION的总数,然后可以使用该子查询来计算每一行的百分比:
SELECT
E.EVENT_ID,
E.EVENT_NAME,
E.EVENT_DATE,
E.SELECTION_NAME,
E.PPWAP,
(SELECT SUM(E1.PPWAP) FROM tblEvent AS E1 WHERE E1.EVENT_ID=E.EVENT_ID AND E1.EVENT_DATE=E.EVENT_DATE) AS TOTAL_PPWAP,
E.PPWAP/TOTAL_PPWAP*100 AS PCT_PPWAP
FROM tblEvent AS E
这将产生以下输出:
您可能需要根据确切定义要计算的总数的方式来更改子查询的WHERE
部分中使用的字段。
此致
答案 1 :(得分:1)
为此,我倾向于使用GROUP BY
和JOIN
。您的问题还不清楚。如果您想按事件比例:
select e.*, PPWAP / total_PPWAP as ratio
from tblEvent as e inner join
(select event_id, sum(PPWAP) as total_PPWAP
from tblEvent
group by event_id
) as ee
on ee.event_id = e.event_id;
如果您确实希望通过selection_id
之类的看不见的列来使用它,则可以将其用于GROUP BY
和JOIN
。
我经常喜欢相关的子查询。但是在这种情况下,它可能会执行不必要的工作,因为它会为每个组多次进行聚合。