SQL查询以查找客户使用特定产品购买的其他产品

SQL查询以查找客户使用特定产品购买的其他产品,sql,hive,Sql,Hive,以下是显示使用3500钥匙的客户的查询。但是桌子上还有其他的钥匙。 我试图找出以下客户除了3500外还使用了哪些其他钥匙。 如果有任何建议,那就太好了 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

以下是显示使用3500钥匙的客户的查询。但是桌子上还有其他的钥匙。 我试图找出以下客户除了3500外还使用了哪些其他钥匙。 如果有任何建议,那就太好了

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

在不了解基础表的结构的情况下,不可能给出最具体适用的答案,但这里有一个应该有效的答案:

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;

custkeys CTE可能是不必要的,或者可能会被更简单的东西取代,cust3500 CTE也可能会被更改,具体取决于表的实际结构。

您想要一个任何客户使用过的所有密钥的列表,还是每个客户使用过的密钥的列表,或者统计使用每把钥匙的客户数量?或者其他什么?更新您的问题添加适当的数据样本和预期的result@rd_nielsen:我想要每个键的客户数,而不是3500键。此计数基于使用3500键的客户,显示表的结构,特别是包含key和customer列的表。@rd_nielsen:我已经给出了表的结构和结果