SQL months_between 分组问题

SQL months_between grouping issue

第一个post;对我放轻松。

对 SQL 来说相对较新(除了简单的查询之外的任何东西),但试图学习更复杂的功能以努力利用高级服务器资源。我的问题:

我想使用 SUM 函数来汇总各种来源的现金流量。我希望按月查看这些现金流量。因为现金流量开始于不同的时间,所以我想对它们进行调整,以便它们全部对齐。我当前的代码:

select 
    months_between(A.reporting_date, B.start_date) as season,
    sum(case when A.current_balance is null then B.original_balance 
        else A.current_balance end) as cashflow

  from dataset1 A, dataset2 B

  group by season
  order by season

现在,执行这样的代码会生成一条错误消息,指出 A.reporting_date 和 B.start_date 必须是 GROUPED 或 AGGREGATE 函数的一部分。

问题是,如果我将它们添加到 GROUP BY 语句中,虽然它生成的输出没有错误,但我得到的现金流量总和基本上是与所有分组变量的笛卡尔交叉。

长话短说,有什么方法可以让我获得仅按季节分组的现金流量总和吗?如果是这样,有什么想法吗?

谢谢。

大多数数据库不允许使用之前在 wheregroup byorder by 子句中定义的列别名。

对于您的查询,您应该使用 months_between(A.reporting_date, B.start_date) 而不是 group byorder by 中的别名 season

此外,您的查询将 return 和 cross product,因为未指定 join 条件。

select 
months_between(A.reporting_date, B.start_date) as season,
sum(case when A.current_balance is null then B.original_balance 
    else A.current_balance end) as cashflow
from dataset1 A
JOIN dataset2 B ON --add a join condition
group by months_between(A.reporting_date, B.start_date)
order by months_between(A.reporting_date, B.start_date)