繁体   English   中英

Vertica SQL-包含子查询的Agg函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM