2010-12-12 4 views
1

У меня есть таблица:Группировка на основании условий

spent totalsent totalused 
---------------------------- 
4  1234  123 
6  12   4 
7  45   32 

мне нужно группе totalused/totalsent в группах 0 < = провел < = 5, 6 < = провел < = 10 и т.д. ,

Как это можно сделать?

+0

Спасибо, пони. +1 – EvilTeach

+0

Мне просто нужна группа на основе условий по атрибуту. Здесь он (итоговый/общий) сгруппирован по группам 0-5, 6-10, 11-15 –

ответ

2

Если вы просто хотите группу 5, вероятно, можно просто создать столбец группы, на которой делит на 5.

with my_source_data as (
    select 4 as spent, 1234 as totalsent, 123 as totalused from dual union all 
    select 6 as spent, 12 as totalsent, 4 as totalused from dual union all 
    select 7 as spent, 45 as totalsent, 32 as totalused from dual 
) 
select 
    (spent_group -1) * 5 + 1 as lower_bound, 
    spent_group * 5 as upper_bound, totalsent, totalused 
from (
    select 
    greatest(ceil(spent/5),1) as spent_group, 
    sum(totalsent) as totalsent, sum(totalused) totalused 
    from my_source_data 
    group by greatest(ceil(spent/5),1) 
) 

Этот код не совсем обрабатывать 0 или что-нибудь ниже-правильно начиная с он помещает все в нижнюю группу и называет его 1-5, но ваши требования немного расплывчаты в этом отношении.

Кроме того, это разреженная группировка, поэтому будет только строка для 11-15, если есть исходные данные, которые позволяют ее создавать.

Смежные вопросы