NTILE SQL存储桶仅4个不匹配2个

SQL NTILE()函数是否可以仅对最大输入值进行分组?例如,当我使用NTILE(4)时,我不希望函数将具有2或3个匹配项的值分组,而仅将具有4个匹配项的值分组。

我很难做到这一点。

我的数据集如下

id timetraveled
1  5
1  5
1  5
1  5
2  6
2  6

我希望NTILE(4)返回以下内容:

ntile id timetraveled
1     1  5
2     1  5 
3     1  5
4     1  5
1     2  6
1     2  6

但是它将给我:

ntile id timetraveled
1     1  5
2     1  5 
3     1  5
4     1  5
1     2  6
*2*   2  6

有人知道如何解决我的问题吗?

piaoliangdemeimei 回答:NTILE SQL存储桶仅4个不匹配2个

请勿使用ntile()。您可以自己计算:

select t.*,(case when seqnum <= 0.25 * cnt then 1
             when seqnum <= 0.50 * cnt then 2
             when seqnum <= 0.75 * cnt then 3
             else 4
        end) as ntile,floor(1 + ((seqnum - 1) * 4 / cnt)) as ntile_2
from (select t.*,row_number() over (partition by id order by timetravelled) as seqnum,count(*) over (partition by id) as cnt
      from t
     ) t;

这有两种不同的方法来计算所需的“ ntile”值。

您还可以使用percentile()(或相关函数)并对此进行算术运算。我宁愿对计算一目了然。

本文链接:https://www.f2er.com/3109957.html

大家都在问