【发布时间】:2015-05-29 16:16:29
【问题描述】:
我需要创建一个具有某些列的平均值的视图。此视图将按月和年访问,我想将其创建为全局(全表扫描),然后在不同的条件下使用,例如:2015 年 5 月 / 2015 年 04 月
现在我是这样创建的:
create or replace view view_x_tipology as
select dt_ref, gg_ref, mm_ref, yyyy_ref, avg(pcr_qt) pcr_tot, avg(ltr_qt) ltr_tot, avg(tbr_qt) tbr_tot, avg(qt_total) day_total
from stock_base
group by rollup (dt_ref, gg_ref, mm_ref, yyyy_ref)
我的主要问题是总计(我不需要小计)只有三个带值的总计,而所有其他字段均为空
DT_REF GG_REF MM_REF YYYY_REF PCR_TOT LTR_TOT TBR_TOT TOT
28/05/2015 28 5 2015 118654 9433 19729 147816
28/05/2015 28 5 118654 9433 19729 147816
28/05/2015 28 118654 9433 19729 147816
28/05/2015 118654 9433 19729 147816
29/05/2015 29 5 2015 132132 10022 19687 161841
29/05/2015 29 5 132132 10022 19687 161841
29/05/2015 29 132132 10022 19687 161841
29/05/2015 132132 10022 19687 161841
125393 9727,5 19708 154828,5
比如我想这样查询view_x_tipology:
select *
from view_per_tipology
where mm_ref = 5
and yyyy_ref = 2015
通过这个查询,我需要 05/2015 的所有天数,最后一行是平均值
更新
正如 Ben 所说,我无法使用汇总创建一个视图来执行此操作,我使用了一个简单的联合来计算平均值。当然,这只适用于几个月和一年。
select dt_ref, gg_ref, mm_ref, yyyy_ref, pcr_qt, ltr_qt, tbr_qt, qt_total
from stock_base
union
select null, null, mm_ref, yyyy_ref, avg(pcr_qt), avg(ltr_qt), avg(tbr_qt), avg(qt_total)
from stock_base
group by rollup (dt_ref, gg_ref, mm_ref, yyyy_ref)
stock_base 上的字段 qt_* 已经有日/月/年的总和。 在 union 中,我只是使用 AVG 函数来创建平均值。
【问题讨论】: