我在另一个帖子上问了类似的问题.

How to find the number of types of buyers for each product per user_id?

我正在使用MySQL工作台8.0.在本例中,我想找出购买产品一次、两次、一次以上、两次以上的唯一USER_ID的数量,等等.

与原始数据类似的样本数据如下所示.

user_id Product
2 chair
1 chair
3 chair
4 chair
1 chair
2 chair
4 table
3 table
4 table
3 table
1 table
2 table
5 table

我要查找的数字是UNIQUE_ID的计数.我希望得到以下结果:

Product BoughtOnce BoughtTwice
chair 4 2
table 5 2

例如,4个独一无二的人只买了一把椅子,而2个独一无二的人买了两把椅子.同样,5个独一无二的人只买了一张桌子,2个独一无二的人买了两张桌子.

在另一个线程中,我可以给出按user_id和product划分的行号.

SELECT 
user_id, Product, ROw_NUMBER() OVER(PARTITION BY `user_id`, Product) rn
FROM myData;

结果:

user_id Product rn
1 chair 1
1 chair 2
1 table 3
2 chair 1
2 chair 2
2 table 3
3 chair 1
3 table 2
3 table 3
4 chair 1
4 table 2
4 table 3
5 table 1

如何根据购买的商品数量来计算UNIQUE_ID的数量?

如果你也有其他方法,请让我知道.

如果你能帮忙,我将不胜感激.

推荐答案

您可以使用两个级别的聚合来实现这一点:首先是按用户/产品,然后是按产品.

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 

Mysql相关问答推荐

我如何才能从MySQL过程中获取LARAVEL端的数据?

SQL不断返回查询失败,并且不知道从这里到哪里go

MySQL:统计单词在单元格中出现的次数,并将数字放在bra中单词的旁边

MySQL全文索引和不区分大小写搜索带来的挑战

MySQL 搜索列字段字符串

为什么MySQL不同版本的值会变化?

如果其中一个表为空,则 mysql 中的查询会给出 0 个结果

根据 JOIN 结果计算列中的值?

使用sql查找源和最终目的地

如何将结果列中的不同值按其他列sql中的值带入单行

MySQL DISTINCT 日期仅返回特定表的 1 个值.相同的查询适用于其他表

Golang Gorm:相同的查询构造不同,抛出不同的结果

添加一个日期字段大于另一个日期字段的要求

减少mysql中的值但不是负数

终止空闲的mysql连接

如何通过 mysql workbench 将数据导入 mysql 数据库?

org.hibernate.InstantiationException:没有实体的默认构造函数::principal.Cliente

MySQL行格式:固定和动态之间的区别?

在 Yii2 中执行原始 SQL 查询?

如何从命令行调用带有参数的mysql存储过程?