2016-06-10 305 views
1

是否有简单的方法来编写SQL四分位函数?teradata四分位函数(或ANSI SQL)

比方说,我有一个列表 - 在表 (0,0,0,1,1,4,5,7,8,25,100,100,101,260,360,370}

什么是产生一个结果的好方法列值一拉:

select 'Q1', quartile(1,col_name) from table_name 
union 
select 'Q2', quartile(2,col_name) from table_name 
union 
select 'Q3', quartile(3,col_name) from table_name 
union 
select 'Q4', quartile(4,col_name) from table_name 
; 

我还没有发现任何可用于这方面迄今

+0

你能告诉你的预期输出 – Noel

回答

2

我不明白你为什么要Q4 :)没有必要使用PERCENTILE_CONT()函数那你可以用max()来获取它。

此代码可能会对您有所帮助。

select  'q1' as q 
      , percentile_cont(0.25) within group (order by col) as q_val 
from  table 
union 
select  'q2' as q 
      , percentile_cont(0.5) within group (order by col) as q_val 
from  table 
union 
select  'q3' as q 
      , percentile_cont(0.75) within group (order by col) as q_val 
from  table; 
+0

什么是Teradata的版本,你使用?在TD14中似乎并不存在。 –

+1

Bart的答案对于TD14.10 +是正确的,在您必须重写之前,请参阅http://developer.teradata.com/blog/dnoeth/2011/06/missing-functions-percentile-disc-percentile-cont-median事实上,在14.10中这应该更有效率,因为每个'percentile_cont'都是单独计算的。 – dnoeth

+0

已确认,按15.x中所述进行工作 –