获取拥有 1,2 和超过 3 种产品的客户数量

Posted

技术标签:

【中文标题】获取拥有 1,2 和超过 3 种产品的客户数量【英文标题】:Get number of customers having 1,2 and more than 3 products 【发布时间】:2021-12-19 15:03:13 【问题描述】:

试图找出一个查询,该查询显示拥有 1,2 个和 3 个以上产品的客户数量。以下是表名和字段:

产品(prod_no, prod_cust_id) 客户(cust_id)

产品

prod_no prod_cust_id
Cheetos1 WR123
Cheetos2 WR123
Lay1 WP232
Prings WP678

客户

cust_id
WN999
WR123
WP232
WP678

我想得到的正确查询示例是:

1 产品 - 100 个客户 2 产品 - 52 位客户 3 产品及以上 - 10 客户
Product Customers
1 100
2 52
>=3 10

我尝试了以下查询

SELECT COUNT (DISTINCT PROD_NO)"Product", CUST_ID"Customers"
  FROM PRODUCT, CUSTOMER
 WHERE PROD_CUST_ID = CUST_ID
HAVING COUNT(PROD_NO) >= 3 --for 3 products and above
GROUP BY CUST_ID

但结果不是我想要的,如此接近却又如此遥远。我只尝试了 3 个及以上的产品,但是如何将 1 个产品和 2 个产品相加。

请帮帮我,谢谢

【问题讨论】:

确实 Customer 不需要出示表格 【参考方案1】:

一种选择是从每列明确计数 (prod_no,prod_cust_id) 开始,然后在条件中将三个或更多产品作为单个案例进行评估,例如

WITH prod_cust AS
(
 SELECT COUNT(DISTINCT prod_no) AS prod_no, 
        DECODE( SIGN(COUNT(DISTINCT prod_cust_id)-2),1,'>=3',
                     COUNT(DISTINCT prod_cust_id) ) AS prod_cust_id
   FROM product
  GROUP BY prod_no 
)
SELECT prod_cust_id AS "Product", SUM(prod_no) AS "Customers"
  FROM prod_cust   
 GROUP BY prod_cust_id 
 ORDER BY 1

Demo

【讨论】:

很棒的解决方案。【参考方案2】:

您可以先统计产品表中的客户数量,然后再分别统计。您可以尝试以下查询 -

WITH DATA AS (SELECT P.*, COUNT(*) OVER(PARTITION BY prod_cust_id) CNT
                FROM Product P)
SELECT '1' Product, COUNT(CASE WHEN CNT = 1 THEN CNT ELSE NULL END) Customers
  FROM DATA
 UNION ALL
SELECT '2', COUNT(CASE WHEN CNT = 2 THEN CNT ELSE NULL END) 
  FROM DATA
 UNION ALL
SELECT '>=3', COUNT(CASE WHEN CNT >= 3 THEN CNT ELSE NULL END) 
  FROM DATA;

Demo.

【讨论】:

以上是关于获取拥有 1,2 和超过 3 种产品的客户数量的主要内容,如果未能解决你的问题,请参考以下文章

Instagram API 访问限制

需要从三个表中获取数据的优化查询

限制 Woocommerce 中的购物车商品数量

通过 SQL 获取订单超过 2 次但登录次数少于 3 次的客户

我正在尝试获取所有拥有超过 3 篇作品的作者的列表 - DBpedia Sparql

SQL查询以获取购买其他客户购买的产品的客户