如何修改上述查询以从 `b` 表开始并逐步累加到 `a` 表?
时间: 2024-11-09 19:23:06 浏览: 12
如果你想从 `b` 表开始并将 `b` 的累计值传递给 `a` 表,你需要调整窗口函数的范围。在这种情况下,你应该使用 `RANGE` 或 `ROW_NUMBER()` 而不是 `PARTITION BY`,因为你想跟踪的是 `b` 表中的行顺序,而不是分组。假设 `b` 表的 `id` 字段自增,可以尝试如下修改:
```sql
WITH cte AS (
SELECT ROW_NUMBER() OVER(ORDER BY b.id) as rn,
b.id,
SUM(b.field_b) OVER (ORDER BY b.id) as cumulative_sum
FROM b
)
SELECT a.id,
COALESCE(cte.cumulative_sum, 0) as cumulative_sum,
b.field_b
FROM a
LEFT JOIN cte ON a.id = cte.id AND cte.rn = 1
ORDER BY a.id, cte.rn;
```
这里,`ROW_NUMBER()` 函数会给每个 `b` 行分配一个连续的行号,`rn = 1` 将选择 `b` 表中的第一行,然后通过 `LEFT JOIN` 与 `a` 表连接,这样就可以保持从 `b` 到 `a` 的累计。
请注意,`COALESCE` 函数用于处理 `a` 表可能没有匹配的 `b` 行的情况,这时 `cumulative_sum` 会被设置为 `0`。
阅读全文