在 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