2016-08-09 34 views
0

Ich habe eine Tabelle wie:SQL: nicht eine einzige Gruppengruppenfunktion Oracle SQL

A B C 
101 1 100 
101 1 110 
101 2 200 
202 2 300 
202 1 100 
303 1 200 
303 1 300 

ich zu bekommen versuche führen wie:

A B C 
101 1 210 
202 2 300 
303 1 500 

Ich habe versucht, diese Abfrage wie Laufen:

select A, B, max(sum(C)) 
from table 
group by A,B; 

Aber immer noch Fehler bekommen.

ORA-00937: not a single-group group function 
00937. 00000 - "not a single-group group function" 

Kann mir jemand helfen.

+0

Wenn Sie 'group by' verwenden, müssen Sie auch nach den Gruppierungsfeldern aggregieren. – FDavidov

+0

Max in Bezug auf was? – jarlh

+0

Ihr Beispiel ist übrigens auch falsch (da Sie keinen Datensatz '101 1 210' haben). Entschuldigung, verpasste die "SUMME". Ignoriere diesen Kommentar. – FDavidov

Antwort

2

Kann auf verschiedene Arten erfolgen. Dies verwendet einen Cte (allgemeiner Tabellenausdruck). Die Cte ​​führt die Grundgruppe durch, d. H. Gibt die Summe von jeder a/b-Kombination von c zurück.

Dann verbinden Sie die Cte ​​mit einer abgeleiteten Tabelle, die jeweils die höchste Summe von c findet.

with cte as 
(
    select A, B, sum(C) sumc 
    from table 
    group by A,B 
) 
select t1.a, t1.b, t1.sumc 
from cte t1 
    join (select a, max(sumc) maxc from cte 
     group by a) t2 on t1.a = t2.a and t1.sumc = t2.maxc