2016-09-21 4 views
0

, so habe ich diese TabelleSumme zu vergleichen() zu anderen Reihen Summe

type total 
------------ 
A | 50 
A | 50 
B | 100 
C | 50 
C | 200 
D | 150 
D | 300 

diesen Code nur als Referenz

select type,Sum(total) 
From table A 
group by type 

Ich möchte alle Arten erhalten, tun habe die gleiche Sum() mit anderen Typen so in SQL hätte ich so etwas

my expected output is 

type total 
------------- 
C | 250 
D | 450 

da Typ A = 100 und theres Typ B, der auch = 100

+0

Immer Ihre Oracle-Version enthalten. Zum Beispiel verwende ich in meinen Lösungen subfactored Abfragen, wann immer sie sinnvoll sind - aber sie sind nur seit Oracle 11.1 verfügbar. Wenn Ihre Version 10 oder niedriger ist, muss die Abfrage mit der "alten" Unterabfrage-Syntax neu geschrieben werden. – mathguy

Antwort

1

Eine Methode Fensterfunktionen verwendet:

select type, total 
from (select type, sum(total) as total, 
      count(*) over (partition by sum(total)) as cnt 
     from table A 
     group by type 
    ) a 
where cnt = 1; 
+0

gibt es eine einfachere Möglichkeit, dies zu tun, ohne Partition durch zu verwenden? –

+0

'partition by' * ist * der einfachere Weg, dies zu tun. –

0

Gruppe unter Verwendung von zweimal - erster Gruppe von Typ der Endsummen zu berechnen, und dann durch Gesamtsumme, um diejenigen mit "gleichen" Gesamtsummen zu entfernen:

with 
    inputs (type, total) as (
     select 'A', 50 from dual union all 
     select 'A', 50 from dual union all 
     select 'B', 100 from dual union all 
     select 'C', 50 from dual union all 
     select 'C', 200 from dual union all 
     select 'D', 150 from dual union all 
     select 'D', 300 from dual 
    ), 
    grouped (type, grand_total) as (
     select type, sum(total) 
     from inputs 
     group by type 
    ) 
select max(type) as type, grand_total 
from grouped 
group by grand_total 
having count(type) = 1 
; 


TYPE GRAND_TOTAL 
---- ----------- 
D   450 
C   250 

2 rows selected. 
Verwandte Themen