我在玩雪花游戏,当我使用峰度函数时,我得到了一个零误差除法:-(
如果有超过一个不同的值(超过4个值),函数就会完美地工作:
select
kurtosis(bob)
from
(select seq4() bob from table(generator(rowcount => 10)));

但是当所有的值都相同时会失败。在这种情况下,1:
select
kurtosis(bob)
from
(select 1 bob from table(generator(rowcount => 10)));

除了在每次评估之前进行计数、不同或HLL测试之外,还能有人提出解决方案吗?
我确实看到了这个文章在谈论潘达斯“滚动偏斜和峰度在所有等价物的样本上失败”,但这几乎是10年前,雪花甚至是一个白日梦。
而偏斜函数存在相同的问题。
我暂时讨厌的解决办法是:
select
DECODE(HLL(bob),1,0,SKEW(bob::FLOAT)) yucky_solution
from
(select 1 bob from table(generator(rowcount => 10)));

发布于 2021-07-24 04:42:00
我认为这反映了kurtosis函数是如何工作的(不管雪花如何工作)。
我在Wolfram和这个在线的峰度计算器上测试了这一点:https://www.socscistatistics.com/tests/skewness/default.aspx
从0到9的数字与雪花相同:

但是10个相同的数字返回一个NaN值:

从数学上讲,这是峰度的公式:

通过标准偏差潜水(某物)得到的。一系列相同的数字的标准偏差是0-因此除以0误差。
因此,避免异常的SQL方法是首先计算stddev:
select
iff(stddev(bob)=0, null, kurtosis(bob))
from
(select 1 bob from table(generator(rowcount => 10)));
-- nullhttps://stackoverflow.com/questions/68506925
复制相似问题