我有一张桌子:
key product_code cost 1 UK 20 1 US 10 1 EU 5 2 UK 3 2 EU 6
我想找到每组"钥匙"的所有产品的总和,并附加到每一行.例如,对于key = 1,找到所有产品的成本总和(20 + 10 + 5 = 35),然后将结果附加到对应于key = 1的所有行.最终结果:
key product_code cost total_costs 1 UK 20 35 1 US 10 35 1 EU 5 35 2 UK 3 9 2 EU 6 9
我更愿意在不使用子连接的情况下这样做,因为这样效率很低.我最好的想法是将该over
函数与sum
函数结合使用,但我无法使其工作.我最好的尝试:
SELECT key, product_code, sum(costs) over(PARTITION BY key) FROM test GROUP BY key, product_code;
我看了一下这些文档但有那么神秘,我不知道如何解决这个问题.我使用Hive v0.12.0,HDP v2.0.6,HortonWorks Hadoop发行版.
与@VB_ answer类似,请使用该BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
语句.
因此,HiveQL查询是:
SELECT key, product_code, SUM(costs) OVER (PARTITION BY key ORDER BY key ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) FROM test;