Sql 试图找到购买了品牌1的客户,只有品牌2和刚刚一起购买了品牌1和品牌2的客户
我试图在每个品牌中找到独特的客户,并试图找出哪些客户购买了这两个品牌 以下是我正在起诉的问题:Sql 试图找到购买了品牌1的客户,只有品牌2和刚刚一起购买了品牌1和品牌2的客户,sql,Sql,我试图在每个品牌中找到独特的客户,并试图找出哪些客户购买了这两个品牌 以下是我正在起诉的问题: WITH GROUPS AS ( SELECT individual_id ,CASE WHEN COUNT(DISTINCT FML) = 1 THEN 'only '|| MAX(FML) ELSE 'cross' END AS GROUPS FROM DM_OWNER.transaction_de
WITH GROUPS AS (
SELECT
individual_id
,CASE WHEN COUNT(DISTINCT FML) = 1 THEN 'only '|| MAX(FML)
ELSE 'cross'
END AS GROUPS
FROM DM_OWNER.transaction_detail_mv A JOIN sl_d1fml B ON A.SKU = B.SKU
GROUP BY
individual_id
)
SELECT
g.GROUPS
,COUNT(DISTINCT t.individual_id) AS countIndv
,SUM(t.dollar_value_us)
,COUNT(t.transaction_number)
,SUM(t.quantity)
FROM DM_OWNER.transaction_detail_mv t
JOIN GROUPS g
ON t.individual_id = g.individual_id
JOIN sl_d1fml C ON T.SKU = C.SKU
WHERE BRAND_ORG_CODE = 'HT'
AND t.is_merch = 1
AND t.Line_Item_Amt_Type_Cd = 'S'
AND TRUNC (t.TXN_DATE) between '01-JAN-18' AND '31-JAN-18'
GROUP BY g.GROUPS;
我只是想知道这个查询是否正确,如果首先有两个以上的FML,它是否有效
为个人购买所有品牌
在旧的数据库中,我使用了wmsys.wm_concat,但它似乎已经过时,被listag取代
下面是一个在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