Группировать по условиям - PullRequest
1 голос
/ 12 декабря 2010

У меня есть таблица:

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

Мне нужно сгруппировать totalused / totalsent в группы по 0 <= потрачено <= 5, 6 <= потрачено <= 10 и т. Д. </p>

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

1 Ответ

2 голосов
/ 12 декабря 2010

Если вы просто хотите группы из 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 или что-либо ниже 0поскольку он помещает все в нижнюю группу и помечает его 1-5, но ваши требования в этом отношении немного расплывчаты.

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

...