2016-06-10 2 views
1

Есть ли простой способ кодирования SQL-квартили?Функция teradata quartile (или 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

Ответ Барта верен для 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 –