sql - 在 DB2 中使用不同的 group by 语句
问题描述
我有一个成功的查询,它为用户和类别返回一些数据(查询按类别和用户分组),基本上显示每个用户每个类别的预测
select
user,
category,
sum(CatProjection) as CatProjection,
sum(CatProjection)/52 as WeekCatProjection
from projections
where user = 123
group by user, category
这将返回我想要/期望的内容:
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 的新列?
解决方案
由于在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
那样没有意义,但是,如果你愿意,你可以将它插入那里。
推荐阅读
- ruby - 为给定类定义 method_missing 时如何修复“NoMethodError”?
- reactjs - react-scripts build 不会转换模板文字,应用程序在 IE 中不起作用
- arduino - Arduino十六进制到字符串解码器不起作用
- angular - Angular 7 测试 retryWhen 使用模拟 http 请求无法实际重试
- jquery - 如何在 SQL 中查询此查询?
- python-3.x - 使用条件格式 pd.xlsxwriter 比较两个日期
- c# - 在 C# 中将 JSON 数据反序列化为列表
- eclipse - 如何在启动 tomcat 时修复错误“无法初始化连接器 [连接器 [HTTP/1.1-443]]”
- javascript - 模态中的ng-click未调用组件中的函数
- android - Kotlin ViewModel List of String