2017-11-09 7 views
0

タイトルに示されているように、ある期間にわたって列Bのサブセットに基づいて列Aのオブジェクトの列Cで最大の合計値を見つけることを試みています列Dとしましょう)。私の現在のクエリは、10,000を超える合計値を返すようなものです。複数のグループ・バイ・句で合計値の最大値を見つける

select id_a, id_b, sum(column_c) from master_table where id_b in (1,2,3,4,5) 
and ymdh >= '2017-11-01' group by 1,2 having sum(column_c) > 10000 order by 2,3 
desc; 

私が返そうとしているのは、sum(column_c)の最大値です。私はmax()とdistinct()の両方の関数を使ってみました。特にmax(sum(imps))を使用しますが、集約関数呼び出しは多くはネストされません。誰でもここでガイダンスを提供できるでしょうか?

+0

使用しているデータベースデザインに、期待される出力を持つサンプルデータがありますか? – MrMarlow

+0

前のクエリから最大の結果を選択するためのサブクエリを試しましたか? –

答えて

2

あなたはFROM使用することができます(選択)T

select max(my_sum) 
from (
    select id_a 
     , id_b 
     , sum(column_c) my_sum 
    from master_table 
    where id_b in (1,2,3,4,5) 
     and ymdh >= '2017-11-01' 
    group by 1,2 having my_sum > 10000 
    order by 2,3 desc; 
) T 
+0

私の考えはちょうど:) –

+0

'がsum(column_c)'を持つことは 'having my_sum'になります - SUMをもう一度実行する必要はありません。 – MrMarlow

+0

@MrMarlowはい正解..ありがとうございます。 – scaisEdge

0

これはあなたがやりたいのか?ある

select id_a, id_b, sum(column_c) 
from master_table 
where id_b in (1,2,3,4,5) and 
     ymdh >= '2017-11-01' 
group by id_a, id_b 
having sum(column_c) > 10000 
order by sum(column_c) desc 
limit 1; 

、必要な値を取得するためにorder bylimitを使用しています。

0

scaisEdgeには答えがあります(と私の+1) - しかし、私はちょうどのようなSQL文を設計する際の思考プロセスについてちょっと追加したいと思っていました。あなたが取り組んでいる。

全体を構成する必要はありません.1つの大きな文、または1つの単一のクエリです。

代わりに、問題を手順に分割し、個々の手順を解決してから、これらの手順をクエリのソースとして使用する必要があります。FROM句にテーブルを使用する必要がないためです。代わりに独自のサブクエリを使用できます。

この問題はありますか?最初のステップが完了しました。特定のグループに対して合計を取得するクエリを作成する方法を理解しました。

select someCol, sum(otherCol) as groupSum from myTable 
group by someCol 

テーブルのように効果的に使うことができます:

select someCol, groupSum 
from 
(
    select someCol, sum(otherCol) as groupSum from myTable 
    group by someCol 
) mySubquery 

あなたの場合、最大合計を取得したいですか?

select max(groupSum) 
from 
(
    select someCol, sum(otherCol) as groupSum from myTable 
    group by someCol 
) mySubquery 

だけでなく、完全なSQL文を構成しながら、このヘルプは意志、それは実際にあなたもあなたのサブクエリ/列に名前を付ける場合は特に、/デバッグ行をそれを読み取ろうとする人をお手伝いします:

select max(totalHitsForWeek) as maxWeeklyUsage 
from 
(
    select week, sum(hits) as totalHitsForWeek 
    from requestsTable 
) hitsPerWeekSubquery 

scaisEdgeの回答に役立つことを望みます! :-)

関連する問題