SQL SELECT 计算中的子查询

SQL subquery within a SELECT calculation

对子查询非常陌生,发现自己需要帮助。

我想从单个数据库查询。在该查询中,我想使用该数据库(SUBQ 和 TOTAL)从两个变量计算一个变量。我的问题是:我的 SUBQ 变量需要在将用于整个查询的那些约束之上受到一组额外的 WHERE 约束。下面是简化的示例代码:

create table [blah]
   as select date_part('YEAR',DATE) as Orig_Year,
             sum([SUBQ variable])/sum(TOTAL) as UD_Rate
      from [database]
      where [full query requirements]
      group by date_part('YEAR',DATE)

我试图通过在 FROM 语句中指定一个子查询来在该计算中创建一个子查询。所以,例如,

             select date_part('YEAR',DATE1) as Orig_year,
                    sum(a.SUBQ)/sum(b.TOTAL) as UD_Rate
             from database b,
                  (select SUBQ
                   from database
                   where DATE2 is not null and
                         months_between(DATE3,DATE2) <= 100 and
                         VALUE1 in ('A','B')) a
             where VALUE2 between 50.01 and 100
             group by date_part('YEAR',DATE1)

我的想法是否正确?我还没有接近功能性查询,也没有运气在网上找到类似的问题,所以我正处于举起双手来找你的地步。虽然我对它们知之甚少,但创建具有 SUBQ 值的 VIEW,然后将其与更广泛的查询合并是否更合适?

对于愿意协助我完成此请求的任何人,我都会想到馅饼和蛋糕。谢谢。

我认为您只想在 window 函数中进行条件聚合。像这样:

select sum(case when [subquery requirements] then t.subq else 0 end) / sum(t.Total)
from t;

我很确定这就是您要找的。就你的 create table 而言:

select date_part('YEAR',DATE) as Orig_Year,
       sum(case when ?? then Total else 0 end)/sum(TOTAL) as UD_Rate
  from [database]
  where [full query requirements]
  group by date_part('YEAR', DATE);

我猜测要比较的列是Total,以when.

中的条件为准

然后使用通用-Table-表达式:

-- Define the CTE expression name and column list.
WITH subquery (Orig_year, UD_Rate)
AS
-- Define the CTE query.
(
  select date_part('YEAR',DATE1) as Orig_year,
                    sum(a.SUBQ)/sum(b.TOTAL) as UD_Rate
             from database b,
                  (select SUBQ
                   from database
                   where DATE2 is not null and
                         months_between(DATE3,DATE2) <= 100 and
                         VALUE1 in ('A','B')) a
             where VALUE2 between 50.01 and 100
             group by date_part('YEAR',DATE1)
)

然后像在主查询中使用 table 一样使用 subquery