2010-12-12 3 views
1

Ich habe eine Tabelle:Gruppe von auf der Grundlage von Bedingungen

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

I bis Gruppe benötigen Totalused/totalsent in Gruppen von 0 < = verbracht < = 5, 6 < = verbracht < = 10 und so weiter .

Wie kann das gemacht werden?

+0

Danke Ponys. +1 – EvilTeach

+0

Ich will nur Gruppe auf der Grundlage von Bedingungen für ein Attribut. Hier ist es (totalent/totalused) gruppiert von in Gruppen von 0-5, 6-10, 11-15 ausgegeben –

Antwort

2

Wenn Sie nur Gruppen von 5 zu wollen, können Sie wahrscheinlich nur eine Spalte Gruppe einrichten, auf dem von 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) 
) 
teilt

Dieser Code nicht ganz 0 oder alles behandeln unter 0 richtig da es setzt alles in die untere Gruppe und beschriftet es 1-5, aber Ihre Anforderungen sind in dieser Hinsicht ein wenig vage.

Auch dies ist eine dünn besetzte Gruppierung, so dass es nur eine Zeile für 11-15 gibt, wenn Quelldaten vorhanden sind, die es ermöglichen, dass sie erzeugt werden.