我在另一个线程上问过类似的问题。
我正在使用 MySQL Workbench 8.0。在这种情况下,我想找到购买产品一次、两次、多次、两次以上等的唯一 user_ids 的数量
与原来相似的样本数据如下所示
user_id | 产品 |
---|---|
2 | 椅子 |
1 | 椅子 |
3 | 椅子 |
4 | 椅子 |
1 | 椅子 |
2 | 椅子 |
4 | 桌子 |
3 | 桌子 |
4 | 桌子 |
3 | 桌子 |
1 | 桌子 |
2 | 桌子 |
5 | 桌子 |
我要找的数字是unique_ids的个数。我想找到以下结果:
产品 | 一次购买 | 买了两次 |
---|---|---|
椅子 | 4 | 2 |
桌子 | 5 | 2 |
例如,4 个独特的人只买了一把椅子,2 个独特的人买了两把椅子。同样,5 个独特的人只买了一张桌子,2 个独特的人买了两张桌子。
从另一个线程,我可以给出按 user_id 和产品分区的行号。
SELECT
user_id, Product, ROw_NUMBER() OVER(PARTITION BY `user_id`, Product) rn
FROM myData;
结果:
user_id | 产品 | rn |
---|---|---|
1 | 椅子 | 1 |
1 | 椅子 | 2 |
1 | 桌子 | 3 |
2 | 椅子 | 1 |
2 | 椅子 | 2 |
2 | 桌子 | 3 |
3 | 椅子 | 1 |
3 | 桌子 | 2 |
3 | 桌子 | 3 |
4 | 椅子 | 1 |
4 | 桌子 | 2 |
4 | 桌子 | 3 |
5 | 桌子 | 1 |
如何根据购买的商品数量查找 unique_ids 的数量?
如果您也有其他方法,请告诉我。
感谢您的帮助。
您可以通过两个级别的聚合来做到这一点:首先按用户/产品,然后按产品。
select product,
sum(cnt = 1) bought_once,
sum(cnt = 2) bought_twice
from (
select product, count(*) cnt
from mydata
group by product, user_id
) d
group by product