首页 > 解决方案 > 根据购买次数对客户进行分类,找出谁属于哪个范围?

问题描述

我有一张桌子叫:purchases

id |id_customer|id_product|date_of_purchase
1    1             1         2019-03-04
2    2             2         2019-02-05
3    3             3         2019-01-03
4    4             4         2019-01-10
5    5             5         2019-01-02
6    1             1         2019-03-05
7    1             3         2019-03-23
8    1             4         2019-03-23
9    1             3         2019-03-12
10   2             3         2019-03-23
11   2             1         2019-03-11

这是我尝试过的代码:

SELECT id_customer , count(id_customer) as times_bought,  
CASE
    WHEN times_bought < 2 THEN "rare"
    WHEN times_bought >1 and times_bought < 4 THEN "neutral"
    ELSE "frequent"
END
FROM purchases;

除了脚本可能有很多问题之外,它给出的 times_bought 并不是一个已知的列。你有什么建议?

标签: mysqlcase

解决方案


您在语句中缺少group by并检查count()而不是times_bought(这是不允许的)CASE

SELECT id_customer, count(date_of_purchase) as times_bought,  
  CASE count(date_of_purchase)
    WHEN 1 THEN 'rare'
    WHEN 2 THEN 'neutral'
    WHEN 3 THEN 'neutral'
    ELSE 'frequent'
  END customerclass
FROM purchases
GROUP BY id_customer

请参阅演示
结果:

| id_customer | times_bought | customerclass |
| ----------- | ------------ | ------------- |
| 1           | 5            | frequent      |
| 2           | 3            | neutral       |
| 3           | 1            | rare          |
| 4           | 1            | rare          |
| 5           | 1            | rare          |

推荐阅读