mysql 如何找到每个user_id的每个产品的购买者类型的数量?

kwvwclae  于 2023-03-28  发布在  Mysql
关注(0)|答案(2)|浏览(186)

我正在使用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;
bxpogfeg

bxpogfeg1#

通过获取一个用户ID获取一个项目的次数的CTE,然后计算产品的row_number的出现次数

WITH CTE AS (SELECT 
`Product`, ROw_NUMBER() OVER(PARTITION BY `user_id`, `Product`) rn
FROM table1)
SELECT
  `Product`,
SUM(rn = 1) as once,
SUM(rn = 2) as twice,
SUM(rn = 3) as three,
SUM(rn > 3) as morethanthree
FROM CTE
GROUP BY `Product`
产品中心一次两次多于三个
000
椅子100
沙发000
搁板1000

fiddle

avwztpqn

avwztpqn2#

二次分组

create table test (user_id int,Product varchar(20));
insert into test values
 (1,'chair')
,(1,'bed')
,(2,'bed')
,(1,'chair')
,(3,'bed')
,(2,'sofa')
,(3,'sofa')
,(3,'shelf')
,(2,'chair');
select product
   -- count number of products
  ,sum(case when qty=1 then qty end) BoughtOnce 
  ,sum(case when qty=2 then qty end) BoughtTwice
  ,sum(case when qty>2 then qty end) MoreThanTwice
   -- counted number of buyers
  ,sum(case when qty=1 then 1 end) BoughtOnce   
  ,sum(case when qty=2 then 1 end) BoughtTwice
  ,sum(case when qty>2 then 1 end) MoreThanTwice
from (select product,user_id,count(*) qty
       from test
       group by product,user_id
    ) t
group by product

结果
| 产物|购买一次|购买两次|比两次还多|购买一次|购买两次|超过两倍|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 椅子|1|二|零|1|1|零|
| 床|三|零|零|三|零|零|
| 沙发|二|零|零|二|零|零|
| 搁板|1|零|零|1|零|零|
Example

相关问题