sql - SQL复杂的不同类型的滚动窗口聚合
问题描述
我一直在尝试为以下任务创建查询。也许有人可以帮助我。
输入表:
+--------+--------------+------+-----------+-----------+
| Index | Week_end_day | Type | Num_val_1 | Num_val_2 |
+--------+--------------+------+-----------+-----------+
| D0024A | 30.06.2018 | A | 10 | 0 |
| D0024A | 30.06.2018 | A | 20 | 0 |
| D0024A | 30.06.2018 | B | 30 | 1 |
| A0025A | 30.06.2018 | C | 5 | 1 |
| A0025A | 30.06.2018 | B | 4 | 1 |
| A0025A | 30.06.2018 | B | 6 | 0 |
| D0024A | 14.07.2018 | C | 5 | 1 |
| D0024A | 14.07.2018 | A | 10 | 1 |
+--------+--------------+------+-----------+-----------+
我想按周聚合数据,以便将所有数值相加,但同时通过另一个数值列(例如平均值)聚合一些分类值。还需要每周计算总行数并每周计算每种类型。
输出表:
+--------+----------+----------------------+----------------------+----------------------+--------------------------+--------------------------+--------------+---+---------------------+
| Index | Week_Num | Type_A_avg_Num_val_1 | Type_B_avg_Num_val_1 | Type_C_avg_Num_val_1 | Sum_per_week - Num_val_1 | Sum_per_week - Num_val_2 | Type_A_count | . | total_count_in_week |
+--------+----------+----------------------+----------------------+----------------------+--------------------------+--------------------------+--------------+---+---------------------+
| D0024A | 1 | 15 | 30 | 5 | 60 | 1 | 2 | . | 6 |
| D0024A | 2 | 10 | 22 | 10 | 10 | 2 | 1 | . | 4 |
| D0024A | 3 | 12 | 14 | 7 | 50 | 0 | 3 | . | 5 |
| D0025A | 1 | . | . | . | . | . | . | . | . |
| D0025A | 2 | . | . | . | . | . | . | . | . |
+--------+----------+----------------------+----------------------+----------------------+--------------------------+--------------------------+--------------+---+---------------------+
我已经到了这个草稿点:
SELECT
Index,
dense_rank() over(order by Week_end_date) AS Week_Num
SUM(Num_val_1) AS SUM_Num_val_1,
SUM(Num_val_2) AS SUM_Num_val_2,
-- need average
AVG(CASE WHEN Type = 'A' THEN Num_val_1 END) AS TypeA_avg_Num_val_1
....
-- need to count
SUM(CASE WHEN Type = 'A' THEN 1 END) AS TypeA_count
FROM t1
GROUP BY Index, Week_end_date
你能看看吗?我收到错误。
另外,不知道 - Index 和 Week_end_day 可能未排序是否重要。
解决方案
推荐阅读
- cloud-foundry - “cf push”是如何工作的?
- docker - 如何将 Vim 连接到 Docker?
- excel - 将值与范围匹配并动态记录关联值
- javascript - 如何使用 remote_function 并防止 javascript xss 注入?
- apache - 两个域指向同一个站点,即使它不应该
- keras - Keras 分类交叉熵与二元交叉熵
- orgchart - 可以突出显示搜索找到的节点 - Orgchart
- git - 如何将贡献者(不是合作者)添加到私有 GitHub 存储库?
- c++ - 在 C++ 中使用 RegisterWaitForSingleObject 将参数传递给回调函数
- sql - 如何从子查询返回多个字段