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 语句中,虽然它生成的输出没有错误,但我得到的现金流量总和基本上是与所有分组变量的笛卡尔交叉。
长话短说,有什么方法可以让我获得仅按季节分组的现金流量总和吗?如果是这样,有什么想法吗?
谢谢。
大多数数据库不允许使用之前在 where
、group by
和 order by
子句中定义的列别名。
对于您的查询,您应该使用 months_between(A.reporting_date, B.start_date)
而不是 group by
和 order 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)
第一个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 语句中,虽然它生成的输出没有错误,但我得到的现金流量总和基本上是与所有分组变量的笛卡尔交叉。
长话短说,有什么方法可以让我获得仅按季节分组的现金流量总和吗?如果是这样,有什么想法吗?
谢谢。
大多数数据库不允许使用之前在 where
、group by
和 order by
子句中定义的列别名。
对于您的查询,您应该使用 months_between(A.reporting_date, B.start_date)
而不是 group by
和 order 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)