2017-03-13 8 views
0

私は、GROUP BYとHAVINGを使用して、当社のプログラムの対象となる多数のコンシューマを選択しています。私たちは、消費者が関連するアカウントをいくつでも(One To Many)持っているというバランスに基づいています。これは私の消費者レベルの資格を満たしている者についての情報を提供しますグループSQLを使用して初期レコードを保存する

select consumerid, 
     sum(balanceonaccts) bal, 
     group_concat(accountid) accts 
from  accounts 
join  consumer 
on  consumer.consumerid = accounts.consumerid 
group by consumerid 
having bal > 300" 

、しかし、唯一の方法は私が組み合わされたアカウントを識別することができました。ここで

はコードの例です。グループバランスは、group_concat()を使用することです。

私は、アカウントの組み合わせがバランス基準を満たしている消費者を特定し、その後何らかの形で出力をアカウントレベルに移動する方法があるのだろうと思っていました。

は私がしようとしたときに:

group by accountid 

はそれは必要ですが、しきい値を通過する加算バランスを満たさないだけで口座の消費者を除外します。

+0

あなたがテーブルのスキーマを投稿できます?どのテーブルが各フィールドを所有しているかを知る必要があります。または少なくともすべてのフィールドのテーブル名を接頭辞として指定します。 – McNets

+0

確かに:consumer.consumerid、accounts.balanceonacct、accounts.accountid、accounts.consumerid –

答えて

0

あなたが派生テーブルとして、既存のクエリを使用してちょうどのアカウントを取得するためにaccountsに再び参加することができますので、あなたはすでに、基準を満たすconsumerid値のグループを持っている:

select 
    a.consumerid, 
    a.accountid, 
    a.balanceonaccts, 
    ba.bal 
from 
    accounts a 
    inner join (
     select 
      ac.consumerid, 
      sum(ac.balanceonaccts) bal 
     from 
      accounts ac 
      inner join consumer co on 
       co.consumerid = ac.consumerid 
     group by 
      ac.consumerid 
     having 
      bal > 300 
    ) ba on ba.consumerid = a.consumerid 
order by 
    a.consumerid, 
    a.accountid 
+0

ありがとう!消費者IDを取得してから、アカウントレベルで結合後に基準を再適用することは、これと同じくらい簡単でした。私は消費者のバランスに完全に一致させることができました。 –

0

私はこれが何をしたいんだと思う:

select a.* 
from accounts a join 
    (select a.consumerid, sum(balanceonaccts) as bal 
     from accounts a 
     group by a.consumerid 
     having bal > 300 
    ) aa 
    on a.consumerid = aa.consumerid; 

私は」あなたがそのテーブルから必要ないくつかの特定のフィールドがある場合を除き、あなたは、まったくconsumersテーブルが必要だと思ういけません。

+0

私はそのコンシューマテーブルからいくつかの詳細を求めていましたが、ここに投稿したロジックは、問題を解決するために必要なものでした。助けてくれてありがとう! –

関連する問題