2013-05-31 4 views
0

У меня есть следующий запрос (его часть). Я хочу, чтобы сначала сделать ведра для LTV так, как 0-0,2; 0,2-0,4; 0,4-0,6. Затем в этих ведрах я хочу разделить их на более мелкие ведра для ящика как 2-4; 4-6; 6-8. так что всего 9 ведер.Агрегирование на основе ковшей sql

Для этого ведра я хочу взять среднее значение SavRate и SavIncentive и сумму PartialPrepay и OutNot.

Как я могу сделать это, высоко ценится

LTV    CRate SavRate SavIncentive PartialPrepay OutNot 
    0.6684459906  5,5  4,5  0,4    0   26,81 
    0.1329765857  5,1  3  2,5    28   77,2 
    0.212585034  6,8  4,5  2,3    17981  22689,01 
    0.6613789002  4,3  3,2  1,1    17   37,04 
    0.4251691757  6,3  3  3,3    99   121,09 
    0.1774713259  4,9  3  1,9    0   63 
+0

Какая СУБД вы используете? Postgres и Oracle имеют функцию 'width_bucket()'. –

ответ

1

можно определить с помощью ведер case заявления. Затем вы можете заполнить ведрами:

select ltvBucket, CrateBucket, 
     avg(SavRate), avg(SavIncentive), sum(PartialPrepay) 
from (select t.*, 
      (case when ltv between 0.0 and 0.2 then 'LTV:0.0-0.2' 
        when ltv between 0.2 and 0.4 then 'LTV:0.2-0.4' 
        when ltv between 0.4 and 0.6 then 'LTV:0.4-0.6' 
        when ltv between 0.6 and 0.8 then 'LTV:0.6-0.8' 
        else 'LTV:other' 
      end) as ltvbucket, 
      (case when Crate between 2 and 4 then 'Crate:2-4' 
        when Crate between 4 and 6 then 'Crate:4-6' 
        when Crate between 6 and 8 then 'Crate:6-8' 
        else 'Crate:Other' 
      end) as CrateBucket 
     from t 
    ) t 
group by ltvBucket, CrateBucket 
Смежные вопросы