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