2015-09-29 76 views
0

空值是我的代碼越來越計算第90百分位

SELECT columnA, MIN(CASE WHEN seqnum >= 0.9 * cnt THEN value END) as percentile_90 

FROM (select t.*, 
     row_number() over (partition by name order by value) as seqnum, 
     count(*) over (partition by name) as cnt 
     from my_table t 
) t 
WHERE XXXXXXXXXXXXXXX 
GROUP BY name 

我得到了大部分percentile_90正確,但其中一些返回null。

For 0.28 
0.28 
0.29 
0.29 
0.29 
0.29 
0.29 
0.29 
0.29 
0.30 
0.30, I get null. 

For 1.34 
1.34 
1.35 
1.35 
1.36 
1.36 
2.32 
2.32 
2.80 
3.01 
3.01, I can get 2.32 from my SQL. 

我的代碼出了什麼問題?

+0

推測,「ColumnA」是「Name」。否則,查詢將不會被解析。 –

回答

0

似乎where子句正在篩選出所需的值。

假設所有的值都被填充,你的代碼應該返回其中一個值。這是因爲對於所有正數,最大的seqnumcntcnt >= 0.9*cnt

另一種可能性是您的值中包含NULL值。如果是這樣,這可能是最後排序,這將是你得到的。

但我的第一個猜測是where條款。如果將放在的子查詢中,那麼窗口函數將在過濾後使用該組行。那麼你應該返回適​​當的值。