试图找到购买品牌1的客户,只有品牌2和刚刚购买品牌1和2的客户

时间:2019-05-16 20:46:03

标签: sql

我试图在每个品牌中找到独特的客户,并试图找到购买了两个品牌的客户。我在下面有一个示例数据库:

https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=3e70be96c05bac789ed3c82b3cae6abb

我的输出应该是:

enter image description here

1 个答案:

答案 0 :(得分:1)

第一 获取个人的所有品牌。

在较旧的数据库中,我使用了wmsys.wm_concat,但似乎已过时,取而代之的是listagg

这是在您的dbfiddle中工作的查询。您可以添加到其中以获取所需的其余列。

select individual_id, 
rtrim( regexp_replace((listagg(brand_org_code , '-') 
WITHIN GROUP (ORDER BY brand_org_code)), 
           '([^-]*)(-\1)+($|-)', 
           '\1\3'),
         '-') as brands, 
sum(dollar_value_us) dollar_sum
from transaction_detail_mv 
group by individual_id

第二 用作子查询。

select brands, sum(dollar_sum)
from (select individual_id, 
rtrim( regexp_replace((listagg(brand_org_code , '-') 
WITHIN GROUP (ORDER BY brand_org_code)), 
           '([^-]*)(-\1)+($|-)', 
           '\1\3'),
         '-') as brands, 
sum(dollar_value_us) dollar_sum
from transaction_detail_mv 
group by individual_id) table1
group by brands