2016-08-09 32 views
0

:私の好きなこのクエリを実行しようとしたSQL:ない単一グループのグループ機能OracleのSQL私はテーブルのように持っている

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

::のように私が取得しようとしています

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

が発生

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

まだエラーが発生しています。

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

誰でも私を助けることができますか?

+0

'group by'を使用する場合は、グループ化フィールドで集約する必要があります。 – FDavidov

+0

最大何について? – jarlh

+0

ところで、あなたの例も間違っています(あなたにはレコード '101 1 210'がないので)。申し訳ありませんが、 "SUM"を逃しました。このコメントは無視してください。 – FDavidov

答えて

2

いくつかの方法で実行できます。これはcte(共通テーブル式)を使用しています。 cteは基本グループを実行し、すなわち、各a/b組み合わせのcの合計を返す。

次に、cteを導出テーブルに結合します。

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