【问题标题】:How to Aggregate Weighted averages fields at different levels of granularity?如何聚合不同粒度级别的加权平均字段?
【发布时间】:2019-05-17 10:34:25
【问题描述】:

我正在将字段的加权公式计算为 sum(revenue)/ Sum(qty),这是根据以下查询。现在我将创建一个视图来存储这些结果,如下面的代码所示。

我的问题是,如果我从视图中选择此 w_revenue 并希望每年查看,我将如何汇总以每年显示它?查看所需的输出。

select month,item, sum(revenue)/ Sum(qty) as w_revenue,
year
from my_revenue_table
group by month, year,item;

create view xyz as 
    select month,item, sum(revenue)/ Sum(qty) as w_revenue,
    year
    from my_revenue_table
    group by month, year,item;

select w_revenue 
from xyz.

如何做到这一点以便每年汇总?

Year    Month   Item    Revenue Qty Sum(revenue)/Sum(Qty)
2019    Mar      A       10      2    5
2019    Mar      B       30      3    10
2019    Feb      C       50      1    50
2019    Feb      D       20      2    10

如果我每年看到的预期值:

Year    Sum(revenue)/Sum(Qty)
2019    13.75                         (10+30+50+20)/(2+3+1+2)

【问题讨论】:

  • 顺便说一句,您使用 mySQL 或 Oracle 什么 DBMS?
  • @BarbarosÖzhan 我正在使用 mysql。

标签: mysql sql


【解决方案1】:

year 分组,然后创建另一个视图

create view abc as
select sum(revenue)/ Sum(qty) as w_revenue, year
  from my_revenue_table
 group by year;

然后打电话

select * from xyz union all
select null, null, a.* from abc a

如果我理解正确的话,将它们组合起来。

或每年的收入在每一行重复为

select x.*,
       (select w_revenue
         from abc
        where year = x.year) as w_revenue_year      
  from xyz x

【讨论】:

  • 我必须从视图中选择,而不是从查询中选择。如何在视图中聚合?
  • @Yogesh 请详细说明显示样式你想看到什么结果
  • 我想显示每年的数据,但我的视图处于较低级别,因为它是直到项目或月份级别。我在我的问题中举例说明了我的期望以及我的查询或视图数据是什么样的。
【解决方案2】:

您无法从视图中进行所需的聚合。你没有足够的信息。

如果您将视图更改为以下内容:

create view xyz as 
    select year, month, item,
           sum(revenue)/ Sum(qty) as w_revenue,
           sum(qty) as total_qty
    from my_revenue_table
    group by month, year, item;

然后您可以将结果汇总为:

select year, sum(w_revenue * total_qty) / sum(total_qty)
from xyz
group by year;

编辑:

或者只是修改视图以获得您想要的信息:

create view xyz as 
    select year, month, item,
           sum(revenue)/ Sum(qty) as w_revenue,
           sum(qty) as total_qty,
           (sum(sum(revenue)) over (partition by year, item) / 
            sum(sum(qty)) over (partition by year, item)
           ) as w_revenue_year
    from my_revenue_table
    group by month, year, item;

【讨论】:

  • 我实际上希望用户可以在没有他干预的情况下使用此字段。我正在使用 Oracle BI 工具来公开此字段以用于报告目的。我不能要求用户在报告本身中执行 sum(w_revenue * total_qty) / sum(total_qty) 以获得结果,这就是我想添加它以查看自身的原因。请提出建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 2018-08-13
  • 1970-01-01
相关资源
最近更新 更多