我正在使用MySQL workbench 8.0,我想找到每个user_id的每个产品的买家类型的数量。例如,对于椅子,如果user_id 1,user_id 2和user_id 3只购买一次,我想创建一个列(买家类型),“BoughtOnce”并添加购买的椅子数量;3张椅子(每位用户购买一次)。
与原始数据类似的样本数据如下所示。
| 用户标识|产品中心|
| --------------|--------------|
| 1|椅子|
| 1|床|
| 二|床|
| 1|椅子|
| 三|床|
| 二|沙发|
| 三|沙发|
| 三|搁板|
| 二|椅子|
我想找到以下结果:
| 产品中心|购买一次|购买两次|
| --------------|--------------|--------------|
| 椅子|1|二|
| 床|三|无效|
| 沙发|二|无效|
| 搁板|1|无效|
例如,user_id 1买了2把椅子,user_id 2买了1把椅子。
我想使用下面的表达式,但意识到我不能聚合窗口函数。
CASE WHEN COUNT(DISTINCT Prodcut)OVER(PARTITION BY user_id)= 1然后...
有人能帮我吗?我很感激你的帮助!
如果你能提出另一种方法会很有帮助。
编辑:我尝试了以下方法:
SELECT Product,
CASE WHEN COUNT(DISTINCT Product) OVER (PARTITION BY user_id) = 1 THEN COUNT(DISTINCT Product) END AS "BoughtOnce",
CASE WHEN COUNT(DISTINCT Product) OVER (PARTITION BY user_id) = 2 THEN COUNT(DISTINCT Product) END AS "BoughtTwice"
From myData;
2条答案
按热度按时间bxpogfeg1#
通过获取一个用户ID获取一个项目的次数的CTE,然后计算产品的row_number的出现次数
fiddle
avwztpqn2#
二次分组
结果
| 产物|购买一次|购买两次|比两次还多|购买一次|购买两次|超过两倍|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 椅子|1|二|零|1|1|零|
| 床|三|零|零|三|零|零|
| 沙发|二|零|零|二|零|零|
| 搁板|1|零|零|1|零|零|
Example