聚合后的窗口函数

Posted

技术标签:

【中文标题】聚合后的窗口函数【英文标题】:Window function after aggregation 【发布时间】:2018-07-09 13:33:42 【问题描述】:

我正在制作一份报告,其中包括窗口功能。 我必须按行汇总值并按制造商显示总计,但我得到不同的总和:

select manufacturer, 
  product_code,
  date_code,
  sum(packs),
  sum(packs) over(partition by manufacturer,date_code)
from staging.sales
group by manufacturer, 
  product_code,
  date_code, 
  packs

我假设,这是由于分组包,但没有它我得到错误。我该如何解决?

提前致谢!

【问题讨论】:

您能否将收到的错误添加到您的问题中?考虑我们的观点 - 相关信息越多,我们就能越好地帮助您。 你什么时候得到“不同的和”?你没有说你做了哪两件事来得到不同的总和,以及你从哪一列看到不同的总和。 GROUP BY 子句中删除包。 样本数据和期望的结果真的很有帮助。 【参考方案1】:

使用sum(sum(packs)):

select manufacturer, product_code, date_code,
       sum(packs),
       sum(sum(packs)) over (partition by manufacturer) as manufacturer_sum
from staging.sales
group by manufacturer, product_code, date_code;

但是,如果您只需要按制造商列出的总数,那么您可能根本不需要窗口函数

select manufacturer, sum(packs) as manufacturer_sum
from staging.sales
group by manufacturer;

【讨论】:

我可能描述的不准确,但销售额是按天计算的,我需要将其汇总到月份并在下一列中显示所有产品的制造商每月总计。 这正是第一个查询所做的。

以上是关于聚合后的窗口函数的主要内容,如果未能解决你的问题,请参考以下文章

HiveSQL核心技能之窗口计算

窗口函数

Hive窗口函数保姆级教程

窗口函数

窗口聚合函数与分组聚合函数的异同

MySQL窗口函数_聚合函数