我最近一直在与AWS Athena合作,我需要将特定列的值乘以(所有这些都是正数)。看作SUM(column1)
是Presto中一个随时可用的聚合函数(这是Athena查询引擎的基础),我希望我能找到类似的东西而不是返回产品。
不幸的是,正如this问题所述,即使SQL也没有这样的东西。这意味着......惊喜,Presto也没有!所以,知道没有内置解决方案,我们怎样才能建立乘法运算符?
答案 0 :(得分:0)
原来这是一个超级快速简单的黑客!回到高中数学课,给出一些{a 0 , 1 , 2 ,..., n }所有的a i > 0(这是一个很大的交易!我们需要所有输入都是正数,否则自然对数是未定义的!),我们知道
exp(ln(a 0 )+ ln(a 1 )+ ... + ln(a n ))= exp (ln(a 0 ))exp(ln(a 1 ))... exp(ln(a n ))= a < sub> 0 a 1 a 2 ... a n
其中ln(x)是x的自然对数,exp(x)是将euler的数字提升到x次幂。但这正是我们想要的!更好的是,presto内置了函数exp(),sum()和ln(),所以我们所要做的就是写
SELECT exp(sum(ln(column1))) AS product FROM yourtable;
瞧!