[英]Vertica SQL - Agg function containing subqueries
以下查询返回错误:聚合函数调用不能包含子查询。
我想动态地获取上个月,上个月的上个月和去年的月份,以将其输入到指标计算中。
select pa14.Group_nm AS Group_nm,
pa14.Sub_Group_nm AS Sub_Group_nm,
pa14.metric1 AS metric1,
pa14.metric2 AS metric2,
pa14.metric3 AS metric3,
pa14.metric4 AS metric4,
pa14.metric5 AS metric5
from (select a11.sub_grp_nm AS Sub_Group_nm,
a11.grp_nm AS Group_nm,
sum(CASE WHEN a11.mnth_id in (select (max(mnth_id) - 100) from summary_table ) THEN a11.scr_val ELSE NULL END) AS metric1,
max(CASE WHEN a11.mnth_id in (select (max(mnth_id) - 100) from summary_table ) THEN 1 ELSE 0 END) AS flag1,
sum(CASE WHEN a11.mnth_id in (select (max(mnth_id) - 2) from summary_table ) THEN a11.scr_val ELSE NULL END) AS metric2,
max(CASE WHEN a11.mnth_id in (select (max(mnth_id) - 2) from summary_table ) THEN 1 ELSE 0 END) AS flag2,
sum(CASE WHEN a11.mnth_id in (select (max(mnth_id) - 1) from summary_table ) THEN a11.scr_val ELSE NULL END) AS metric3,
max(CASE WHEN a11.mnth_id in (select (max(mnth_id) - 1) from summary_table ) THEN 1 ELSE 0 END) AS flag3,
sum(a11.mnth_over_mnth_scr_val) AS metric4,
sum(a11.yr_over_yr_scr_val) AS metric5
from summary_table a11
group by a11.sub_grp_nm,
a11.grp_nm
) pa14
where (pa14.flag1 = 1
and pa14.flag2 = 1
and pa14.flag3 = 1)
我已经阅读了有关此问题的其他文章,但找不到针对我的特定用例的解决方案。 希望你能帮助我。
在内部子查询中,您将使用嵌套子查询和聚合结果,以将值返回到IN子句..
您应该避免使用联接
select a11.sub_grp_nm AS Sub_Group_nm,
a11.grp_nm AS Group_nm,
sum(CASE WHEN a11.mnth_id = max_mnth - 100 THEN a11.scr_val ELSE NULL END) AS metric1,
max(CASE WHEN a11.mnth_id = max_mnth - 100 THEN 1 ELSE 0 END) AS flag1,
sum(CASE WHEN a11.mnth_id = max_mnth - 2 THEN a11.scr_val ELSE NULL END) AS metric2,
max(CASE WHEN a11.mnth_id = max_mnth - 2 THEN 1 ELSE 0 END) AS flag2,
sum(CASE WHEN a11.mnth_id = max_mnth - 1 THEN a11.scr_val ELSE NULL END) AS metric3,
max(CASE WHEN a11.mnth_id = max_mnth - 1 THEN 1 ELSE 0 END) AS flag3,
sum(a11.mnth_over_mnth_scr_val) AS metric4,
sum(a11.yr_over_yr_scr_val) AS metric5
from summary_table a11
INNER JOIN (
select summary_table.sub_grp_nm, summary_table.grp_nm, max(mnth_id) max_mnth
from summary_table
group by summary_table.sub_grp_nm, summary_table.grp_nm
) T ON T.sub_grp_nm = a11.sub_grp_nm, T.grp_nm = a11.grp_nm
例如:
select pa14.Group_nm AS Group_nm,
pa14.Sub_Group_nm AS Sub_Group_nm,
pa14.metric1 AS metric1,
pa14.metric2 AS metric2,
pa14.metric3 AS metric3,
pa14.metric4 AS metric4,
pa14.metric5 AS metric5
from (
select a11.sub_grp_nm AS Sub_Group_nm,
a11.grp_nm AS Group_nm,
sum(CASE WHEN a11.mnth_id = max_mnth - 100 THEN a11.scr_val ELSE NULL END) AS metric1,
max(CASE WHEN a11.mnth_id = max_mnth - 100 THEN 1 ELSE 0 END) AS flag1,
sum(CASE WHEN a11.mnth_id = max_mnth - 2 THEN a11.scr_val ELSE NULL END) AS metric2,
max(CASE WHEN a11.mnth_id = max_mnth - 2 THEN 1 ELSE 0 END) AS flag2,
sum(CASE WHEN a11.mnth_id = max_mnth - 1 THEN a11.scr_val ELSE NULL END) AS metric3,
max(CASE WHEN a11.mnth_id = max_mnth - 1 THEN 1 ELSE 0 END) AS flag3,
sum(a11.mnth_over_mnth_scr_val) AS metric4,
sum(a11.yr_over_yr_scr_val) AS metric5
from summary_table a11
INNER JOIN (
select summary_table.sub_grp_nm, summary_table.grp_nm, max(mnth_id) max_mnth
from summary_table
group by summary_table.sub_grp_nm, summary_table.grp_nm
) T ON T.sub_grp_nm = a11.sub_grp_nm, T.grp_nm = a11.grp_nm
) pa14
where (pa14.flag1 = 1
and pa14.flag2 = 1
and pa14.flag3 = 1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.