【问题标题】:Window function isn't correctly summing over partition by column窗口函数未正确按列对分区求和
【发布时间】:2021-02-13 16:47:17
【问题描述】:

我有两个数据集:货件和账单。我不知道如何在 StackOverflow 上粘贴 csv 表的摘录,所以这里是图片。

发货

账单

我正在尝试运行一个窗口函数,该函数使用以下查询按 shipping.id 对所有实际金额求和:

SELECT 
    *
    , sum(actual_amount) OVER
         (PARTITION BY shipments.shipment_id) as costs
FROM shipments JOIN bills ON shipments.shipment_id = bills.shipment_id

当我运行此查询时,成本列显示的总和不正确:

costs 列只对每个 shipping_id 的最后两个 actual_amount 求和,并且没有正确求和。我觉得我在这里缺少一些基本的东西。我基本上是在尝试在 SQL 中创建一个 Excel SUMIF 函数,其中 actual_amount 是总和范围,shipment_id 是标准。

【问题讨论】:

  • 总和总是需要一个分组依据,如果你省略它,那么它会汇总到详细级别
  • 看起来您的分区正在聚合到 shipping_id 级别。它具有一对多的关系。只需使用 sum 和 group by 并删除分区
  • SELECT , sum(actual_amount) actual_amount FROM shipping JOIN bills ON shipping.shipment_id = bills.shipment_id group by shipping.shipment_id

标签: sql sqlite window


【解决方案1】:

想通了!问题是 bills 表中有任何大于 1000 的数字的逗号。我从表中删除了格式,并且窗口函数现在可以正常工作。 correct output

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    相关资源
    最近更新 更多