如何用SQL统计拥有1至5个产品的合作方数量?
统计不同产品数量的合作方分布
要实现统计拥有1-5个产品的合作方数量,核心是先计算每个合作方(user)实际拥有的产品数量,再基于这个数量做分组统计。你当前的SQL片段仅按user和product分组,无法直接达成目标,以下是修正后的实现方案:
方案1:合并同类产品(x、y视为同一类)
如果需要把x和y合并为同一产品类别,统计用户拥有的不同类别数量,再统计各数量对应的合作方数:
SELECT product_count, COUNT(user) AS partner_count FROM ( SELECT user, -- 合并x、y为同一类别,再统计每个用户的不同类别数 COUNT(DISTINCT CASE WHEN product IN ('x', 'y') THEN 'x' WHEN product = 'z' THEN 'z' END) AS product_count FROM your_table GROUP BY user ) AS user_product_summary -- 只保留1-5个产品的情况 WHERE product_count BETWEEN 1 AND 5 GROUP BY product_count ORDER BY product_count;
方案2:不合并产品,统计原始不同产品数
如果不需要合并x和y,直接统计用户拥有的原始不同产品数量:
SELECT product_count, COUNT(user) AS partner_count FROM ( SELECT user, COUNT(DISTINCT product) AS product_count FROM your_table GROUP BY user ) AS user_product_summary WHERE product_count BETWEEN 1 AND 5 GROUP BY product_count ORDER BY product_count;
原SQL的问题说明
你当前的SQL是按user和product分组,仅能得到每个用户每个产品的记录行数(Service字段),没有完成「统计每个用户的产品总数」这一核心步骤,因此无法直接得到各产品数量区间的合作方分布。
内容的提问来源于stack exchange,提问作者pkiworld
相关产品推荐
相关产品推荐

