分组聚合 OVER PARTITION BY

2023-08-23 18:49:06 浏览数 (2)

在 HIVE 中

最近在使用 HIVE,需要统计 当年累计和 这样的指标,请教同事后发现了 OVER(PARTITION BY) 开窗函数。

分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。

开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。

测试语句:

代码语言:javascript复制
CREATE TABLE default.test_over_partition (
  `fdate` Date,
  `year` Int,
  `month` Int,
  `category1` String,
  `category2` String,
  `income` Double
);

INSERT INTO hdp_fin_dash_ods.test_over_partition (`fdate`,`year`,`month`,`category1`,`category2`,`income`) VALUES
('2020-01-01',2020,1,'3C','电脑','1010'),
('2020-01-01',2020,1,'3C','手机','1011'),
('2020-02-01',2020,2,'3C','电脑','1012'),
('2020-02-01',2020,2,'3C','手机','1013'),
('2020-03-01',2020,3,'3C','电脑','1014'),
('2020-03-01',2020,3,'3C','手机','1015'),
('2021-04-01',2021,4,'3C','电脑','1016'),
('2021-04-01',2021,4,'3C','手机','1017'),
('2021-05-01',2021,5,'3C','电脑','1018'),
('2021-05-01',2021,5,'3C','手机','1019');

-- 查询每年每 category2 日累计 income

SELECT `fdate`,`year`,`month`,`category1`,`category2`,`income`
,SUM(income) OVER (PARTITION BY `year`,`category1`,`category2` ORDER BY fdate) AS ttl_year_income
FROM hdp_fin_dash_ods.test_over_partition;

在 MySQL 中

Before MySQL 8.0 you can’t use window functions like ROW_NUMBER.

References

  • Mysql 分组聚合实现 over partition by 功能 | cnblogs
  • Emulating PARTITION OVER with MySQL 5.7 | stackoverflow

– EOF –

  • # mysql
  • # hive

0 人点赞