在 DB2 中使用不同的 group by 语句
Using different group by statements in DB2
我有一个成功的查询,它返回了一些用户和类别的数据(查询按类别和用户分组)
这基本上显示了每个用户每个类别的预测
select
user,
category,
sum(CatProjection) as CatProjection,
sum(CatProjection)/52 as WeekCatProjection
from projections
where user = 123
group by user, category
而这个returns我want/expect:
USER | CATEGORY | CatProjection | WeekCatProjection
----------------------------------------------------------------
123 | CategoryA | 755000 | 14519
123 | CategoryB | 390000 | 7500
123 | CategoryC | 281250 | 5408
问题是,这些结果按用户和类别分组,现在我想添加两列,它们取决于该用户的 CatProjection 总和,但不按类别分组。
因此,对于新值 TotalCatProjection,我想为该用户添加所有 CatProjection 值。然后我想使用 CatPercentage 将 WeekCatProjection 除以 TotalCatProjection。
所以现在我希望得到这些结果:
USER | CATEGORY | CatProjection | WeekCatProjection | TotalCatProjection | CatPercentage
--------------------------------------------------------------------------------------------------------
123 | CategoryA | 755000 | 14519 | 27427 | 52.94
123 | CategoryB | 390000 | 7500 | 27427 | 27.35
123 | CategoryC | 281250 | 5408 | 27427 | 19.72
当我的主查询按用户和类别分组时,如何获得这 2 个仅基于 USER 的新列?
由于 window 函数在 DB2 7.3 中引入,您应该使用子查询解决方案:
select user,
category,
CatProjection,
WeekCatProjection,
TotalCatProjection,
100 * WeekCatProjection / TotalCatProjection
from
(
select
user,
category,
sum(CatProjection) as CatProjection,
sum(CatProjection)/52 as WeekCatProjection,
(
select sum(CatProjection)
from projections p2
where p1.user = p2.user
) as TotalCatProjection
from projections p1
group by user, category
) t
我避免了 where user = XYZ
条件,因为这样 GROUP BY user
就没有意义了,但是,如果您愿意,可以将它插入那里。
我有一个成功的查询,它返回了一些用户和类别的数据(查询按类别和用户分组) 这基本上显示了每个用户每个类别的预测
select
user,
category,
sum(CatProjection) as CatProjection,
sum(CatProjection)/52 as WeekCatProjection
from projections
where user = 123
group by user, category
而这个returns我want/expect:
USER | CATEGORY | CatProjection | WeekCatProjection
----------------------------------------------------------------
123 | CategoryA | 755000 | 14519
123 | CategoryB | 390000 | 7500
123 | CategoryC | 281250 | 5408
问题是,这些结果按用户和类别分组,现在我想添加两列,它们取决于该用户的 CatProjection 总和,但不按类别分组。
因此,对于新值 TotalCatProjection,我想为该用户添加所有 CatProjection 值。然后我想使用 CatPercentage 将 WeekCatProjection 除以 TotalCatProjection。
所以现在我希望得到这些结果:
USER | CATEGORY | CatProjection | WeekCatProjection | TotalCatProjection | CatPercentage
--------------------------------------------------------------------------------------------------------
123 | CategoryA | 755000 | 14519 | 27427 | 52.94
123 | CategoryB | 390000 | 7500 | 27427 | 27.35
123 | CategoryC | 281250 | 5408 | 27427 | 19.72
当我的主查询按用户和类别分组时,如何获得这 2 个仅基于 USER 的新列?
由于 window 函数在 DB2 7.3 中引入,您应该使用子查询解决方案:
select user,
category,
CatProjection,
WeekCatProjection,
TotalCatProjection,
100 * WeekCatProjection / TotalCatProjection
from
(
select
user,
category,
sum(CatProjection) as CatProjection,
sum(CatProjection)/52 as WeekCatProjection,
(
select sum(CatProjection)
from projections p2
where p1.user = p2.user
) as TotalCatProjection
from projections p1
group by user, category
) t
我避免了 where user = XYZ
条件,因为这样 GROUP BY user
就没有意义了,但是,如果您愿意,可以将它插入那里。