SQL计数需求:统计同时使用厨卫产品的客户(按厨房产品分组)
统计同时使用卫浴与厨房产品的客户分布
现有customer_prods表数据,需编写SQL查询,统计同时使用Bathroom(卫浴)产品与Kitchen(厨房)产品的客户,按Kitchen类的product_lvl_2(厨房子产品)分组,统计每个厨房子产品对应的符合条件的客户数量。
规则示例
- Jim使用厨房产品b及卫浴产品,产品b的客户计数为1;
- Pete使用厨房产品a、c及卫浴产品,产品a、c的客户计数各为1;
- Abby仅使用卫浴产品,不计入统计。
期望输出
| Kitchen Product | Customer Count Using Bathroom Product |
|---|---|
| a | 2 |
| b | 3 |
| c | 2 |
表数据
| Customer | Product_lvl_1 | Product_lvl_2 |
|---|---|---|
| Abby | Bathroom | Bathroom |
| Jean | Kitchen | a |
| Jim | Bathroom | Bathroom |
| Jim | Kitchen | b |
| Joe | Bathroom | Bathroom |
| Joe | Kitchen | b |
| Pete | Bathroom | Bathroom |
| Pete | Kitchen | c |
| Pete | Kitchen | a |
| Robin | Bathroom | Bathroom |
| Robin | Kitchen | a |
| Sally | Kitchen | b |
| Tom | Bathroom | Bathroom |
| Tom | Kitchen | b |
| Tom | Kitchen | c |
建表与插入数据语句
create table customer_prods ( customer varchar(30), product_lvl_1 varchar(30), product_lvl_2 varchar(30), revenue number ) INSERT INTO customer_prods (customer,product_lvl_1,product_lvl_2,revenue) VALUES ('Abby','Bathroom','Bathroom',1), ('Jean','Kitchen','a',6), ('Jim','Bathroom','Bathroom',6), ('Jim','Kitchen','b',8), ('Joe','Bathroom','Bathroom',7), ('Joe','Kitchen','b',6), ('Pete','Bathroom','Bathroom',9), ('Pete','Kitchen','c',2), ('Pete','Kitchen','a',8), ('Robin','Bathroom','Bathroom',7), ('Robin','Kitchen','a',9), ('Sally','Kitchen','b',6), ('Tom','Bathroom','Bathroom',8), ('Tom','Kitchen','b',7), ('Tom','Kitchen','c',8);
SQL查询方案
SELECT k.product_lvl_2 AS "Kitchen Product", COUNT(DISTINCT k.customer) AS "Customer Count Using Bathroom Product" FROM customer_prods k JOIN ( -- 筛选出同时使用卫浴和厨房产品的客户 SELECT customer FROM customer_prods GROUP BY customer HAVING SUM(CASE WHEN product_lvl_1 = 'Bathroom' THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN product_lvl_1 = 'Kitchen' THEN 1 ELSE 0 END) > 0 ) valid_customers ON k.customer = valid_customers.customer WHERE k.product_lvl_1 = 'Kitchen' GROUP BY k.product_lvl_2 ORDER BY k.product_lvl_2;
思路说明
- 子查询
valid_customers:通过分组客户,判断每个客户是否同时存在卫浴和厨房产品的记录,筛选出符合条件的客户列表; - 主查询关联该客户列表,只选取厨房产品的数据,按
product_lvl_2分组,统计每个厨房子产品对应的唯一客户数量。
内容的提问来源于stack exchange,提问作者GrandFX
相关产品推荐
相关产品推荐

