组合两个使用聚合求和函数的 SQL 语句
Combining two SQL statements that use an aggregate sum function
有没有办法将这两个语句合并为一个(即不生成 capital_cost_sum 视图)?
CREATE VIEW capital_cost_sum AS
SELECT
a.capital_project_id,
sum(a.renewal_cost) AS summed_renewal_cost
FROM (
SELECT
capital_project_feature_combination.capital_project_id,
capital_project_feature_combination.feature_id,
feature_calculation.renewal_cost
FROM (
capital_project_feature_combination
LEFT JOIN feature_calculation ON
((capital_project_feature_combination.feature_id = feature_calculation.feature_id))
)
) a
GROUP BY a.capital_project_id;
然后这个 SELECT 查询:
SELECT
capital_project.capital_project_id,
capital_project.name AS capital_project_name,
capital_project.year,
capital_project.description,
CASE
WHEN (capital_project.proforma_cost IS NOT NULL) THEN capital_project.proforma_cost
ELSE (capital_cost_sum.summed_renewal_cost)
END AS estimated_project_cost,
capital_project.community_id
FROM capital_project
LEFT JOIN capital_cost_sum ON capital_project.capital_project_id = capital_cost_sum.capital_project_id;
您可以使用派生的 table:
select ...
from capital_project
left join (
< your query from the view goes here >
) as capital_cost_sum ON ...
或使用常见的table表达式
with capital_cost_sum as (
< your query from the view goes here >
)
select ...
from capital_project
left join capital_cost_sum ON ...
有没有办法将这两个语句合并为一个(即不生成 capital_cost_sum 视图)?
CREATE VIEW capital_cost_sum AS
SELECT
a.capital_project_id,
sum(a.renewal_cost) AS summed_renewal_cost
FROM (
SELECT
capital_project_feature_combination.capital_project_id,
capital_project_feature_combination.feature_id,
feature_calculation.renewal_cost
FROM (
capital_project_feature_combination
LEFT JOIN feature_calculation ON
((capital_project_feature_combination.feature_id = feature_calculation.feature_id))
)
) a
GROUP BY a.capital_project_id;
然后这个 SELECT 查询:
SELECT
capital_project.capital_project_id,
capital_project.name AS capital_project_name,
capital_project.year,
capital_project.description,
CASE
WHEN (capital_project.proforma_cost IS NOT NULL) THEN capital_project.proforma_cost
ELSE (capital_cost_sum.summed_renewal_cost)
END AS estimated_project_cost,
capital_project.community_id
FROM capital_project
LEFT JOIN capital_cost_sum ON capital_project.capital_project_id = capital_cost_sum.capital_project_id;
您可以使用派生的 table:
select ...
from capital_project
left join (
< your query from the view goes here >
) as capital_cost_sum ON ...
或使用常见的table表达式
with capital_cost_sum as (
< your query from the view goes here >
)
select ...
from capital_project
left join capital_cost_sum ON ...