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
对子查询非常陌生,发现自己需要帮助。
我想从单个数据库查询。在该查询中,我想使用该数据库(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