sql - 计算每个商家 ID 的独占和共享 product_id
问题描述
对于merchant_id
我想计算的每个都product_id
存在于其中store_a
然后store_b
被归类为'shared_product
并且计数product_id
仅存在于store_a
或store_b
分别被分类为'exclusive_product_storeA'
或'exclusive_product_storeB'
我的查询不显示shared_product
,它只显示'exclusive_product_storeA'
和'exclusive_product_storeB'
请不要只有store_a和store_b而是多个Mercer_id
桌子
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;
解决方案
您可以使用窗口函数对产品进行分类,然后聚合:
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<>fiddle。
推荐阅读
- reactjs - 即使在设置了重定向后,ReactJS 应用程序也无法在 AWS Amplify 上使用 www
- docker-compose - 无法在 CentOS 上运行自托管哨兵
- c# - C#正则表达式匹配一个词作为一个整体或只有特殊字符作为前缀或后缀
- numpy - 带索引的 Bincount
- primefaces - Primefaces标签焦点在未打开的侧边栏中
- postgresql - Postgres解释分析:总时间大大超过部分总和
- java - Android:onCreate 中的 Intent startActivity 给出了空白屏幕
- django - 将表单数据保存到 models.ForeignKey 字段
- java - 为什么在 swagger api 请求中找不到响应部分?404错误/这是jsp项目
- python - AttributeError:“DataFrame”对象没有属性“rt”