2017-06-26 11 views
0

以下は、キー "3500"を使用した顧客を表示するクエリです。しかし、テーブルには他のキーがあります。 私は3500に加えて、以下の顧客が使用した他のキーを調べようとしています。 どんな提案にもお勧めです!顧客が特定の製品で購入した他の製品を検索するSQLクエリ

SELECT distinct(b.id2) 
FROM tab1 as a, tab2 as c, tab3 as b 
WHERE a.id1 = c.id1 and c.id2 = b.id2 
group by b.id2 
having count 
      (
       case 
        when key in (3500) 
        then 1 
       end 
      ) > 0 

    id2    key 
    123    3500 
    123    3501 
    123    4100 
    234    3500 
    234    1234 
    234    4100 
    312    3500 
    312    4100 

結果:(上記のリストは、他のプロダクトキーとの組み合わせで「3500」を使用しているお客様のみです)

key(other than 3500) count 
    3501    1 
    4100    3 
    1234    1 
+0

*お客様が使用したすべてのキー、または各*顧客が使用したキーのリスト、または各キーを使用した顧客の数の一覧が必要ですか?または、他の何か? –

+0

あなたの質問を更新する適切なデータサンプルと期待される結果を追加してください – scaisEdge

+0

@rd_nielsen:キー "3500"以外のキーごとに顧客数をカウントしたい(この数値は "3500"を使用した顧客に基づいています) – user3447653

答えて

0

基礎となる表の構造を知らなくても、それはすることはできません最も具体的に適用可能な答えを与えるが、ここでは動作するはずです1:custkeys CTEは不要かもしれない、あるいは何かのSiと交換することがあります

with t as (
    SELECT * 
    FROM 
     tab1 as a 
     INNER JOIN tab2 as c ON c.id1=a.id1 
     INNER JOIN tab3 as b ON b.id2=c.id2 
    ), 
custkeys as (
    select distinct id2, key 
    from t 
    ), 
cust3500 as (
    select distinct id2 
    from custkeys 
    where key = 3500 
    ) 
select 
    key, 
    count(*) as customers 
from 
    custkeys as k 
    inner join cust3500 as c on c.id2=k.id2 
where 
    key <> 3500; 

またテーブルの実際の構造によってはCTEが変更される可能性があります。

関連する問題