计算每个商家的独占和共享的产品_id

问题描述 投票:0回答:1

对于每个 merchant_id 我想数数 product_id 存在于 store_astore_b 然后被列为 'shared_product

和数 product_id 只存在于 store_astore_b 分别被列为 'exclusive_product_storeA''exclusive_product_storeB'

我的查询没有显示 shared_product ,它只显示 'exclusive_product_storeA''exclusive_product_storeB'

请不要只有 储存_a商店_b 但多个 商户ID's

merchant_id   product_id    store_id    product_status
1             8328          store_a     new_product
1             4234          store_a     new_product
1             8328          store_b     new_product 
1             4234          store_b     new_product
1             5943          store_b     old_product

2             1244          store_a     old_product
2             1244          store_b     old_product
2             2353          store_a     old_product 
2             2353          store_b     old_product
2             5943          store_a     new_product

3             9838          store_a     old_product
3             9838          store_b     old_product
3             1244          store_a     old_product
3             1244          store_b     old_product
3             6544          store_a     old_product
3             6544          store_b     old_product
3             3443          store_a     old_product 



产出表

merchant_id    product_status   product_state              count_product
1              new_product      shared_products             2
1              old_product      exclusive_product_storeB    1

2              old_product      shared_products             2
2              new_product      exclusive_product_storeB    1

3              old_product      shared_products             3
3              old_product      exclusive_product_storeA    1



查询

select merchant_id, product_status, product_state, count(*) as cnt
from (select merchant_id, product_id, product_status,
             (case when max(store_id) <> min(store_id) then 'shared'
                   when max(store_id) = 'store_a' then 'only store_a'
                   else 'only store_b'
              end) as product_state
      from t
      where store_id in ('store_a', 'store_b)
      group by merchant_id, product_id, product_status
     ) mp
group by merchant_id, product_status, product_state;


sql presto
1个回答
1
投票

你可以使用窗口函数对产品进行分类,然后进行汇总。

select merchant_id, product_status, product_state, count(*) as cnt
from (select t.*,
             (case when min(store_id) over (partition by product_id) = 
                        max(store_id) over (partition by product_id)
                   then min(store_id) over (partition by product_id) || ' only'
                   else 'both'
              end) as product_state
      from t
      where store_id in ('store_a', 'store_b')
     ) mp
group by merchant_id, product_status, product_state;

这里 是一个db<>提琴。

© www.soinside.com 2019 - 2024. All rights reserved.