获取拥有 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 种产品的客户数量的主要内容,如果未能解决你的问题,请参考以下文章
通过 SQL 获取订单超过 2 次但登录次数少于 3 次的客户