如何统计仅持有单一产品/同时持有全部产品的客户数量
SQL统计需求解答
你提供的原始表结构及测试数据如下:
| id | name | product |
|---|---|---|
| 1 | Ben | x |
| 2 | Ann | y |
| 3 | Kate | y |
| 4 | John | x |
| 4 | John | y |
以下解答基于标准SQL语法,可适配绝大多数主流关系型数据库,代码中的表名请替换为你的实际表名。
1. 统计仅持有x产品的客户数量
实现思路
先筛选出所有持有x产品的客户,再排除掉同时持有其他任意产品的客户,最后对客户ID去重计数即可。
参考代码
SELECT COUNT(DISTINCT id) AS 仅持有x的客户数 FROM 表名 t1 WHERE product = 'x' AND NOT EXISTS ( SELECT 1 FROM 表名 t2 WHERE t2.id = t1.id AND t2.product != 'x' );
测试结果
基于你提供的测试数据,查询结果为1,仅客户Ben符合条件。
2. 统计同时持有所有产品的客户数量
实现思路
首先统计全表共有多少种不同的产品,再按客户ID分组统计每个客户持有的不同产品数量,数量等于总产品数的客户即为符合条件的用户,最后计数即可。
参考代码
WITH product_total AS ( -- 统计全表总产品数量 SELECT COUNT(DISTINCT product) AS total_count FROM 表名 ) SELECT COUNT(*) AS 持有所有产品的客户数 FROM ( -- 筛选出持有产品数等于总产品数的客户 SELECT id FROM 表名 GROUP BY id HAVING COUNT(DISTINCT product) = (SELECT total_count FROM product_total) ) qualified_users;
测试结果
基于你提供的测试数据,全表共2种产品,仅客户John同时持有所有产品,查询结果为1。
内容的提问来源于stack exchange,提问作者KATE SR
相关产品推荐
相关产品推荐

