gpt4 book ai didi

mysql - 分组依据中的 SQL : count customer that never bought a product,

转载 作者:行者123 更新时间:2023-11-28 23:18:22 25 4
gpt4 key购买 nike

我只有这个 MySQL 表:订单(customer_id, wine_id, price)

一个例子

wine_id |   customer_id |   price
1 | 1 | 13€
1 | 2 | 13€
1 | 3 | 13€
2 | 1 | 17€
2 | 3 | 16€
3 | 4 | 15€
3 | 2 | 15€

并希望获得从未购买过产品的客户数量(每种产品)。

所以有 3 种酒和 4 位顾客。这张 table 上的所有顾客都至少买了一瓶酒。在上面的例子中,我期望如下:

wine_id |   count(distinct customer)
1 | 1
2 | 2
3 | 2

事实上,id 为 1 的酒已经被 3 位顾客购买了,共 4 位顾客......所以既然我想要从未购买过该产品的客户预期结果为 1

我想过这个:

SELECT 
o1.wine_id,
COUNT(DISTINCT o1.customer_id)
FROM
order o1
WHERE
customer_id NOT IN (SELECT
o2.customer_id
FROM
order o2
WHERE
o2.wine_id = o1.wine_id)
GROUP BY o1.wine_id;

想法是进入购买 Wine 的客户的子查询,然后将其放入传递分组 Wine 的 where 子句中。但显然这个假设有问题。它返回 0 行。为什么我不能访问子查询中的值?

你们能帮我解决这个问题吗?

最佳答案

试试这个:

select 
wine_id,
cus_num - count(distinct customer_id) never_bought_num
from yourtable
join (select count(distinct customer_id) as cus_num from yourtable) t
group by wine_id

参见 demo在 sqlfiddle 中。

在您的情况下,您应该计算表 order 中的所有客户,这是总数,然后减去购买产品的客户数量,您将得到从未购买过的数量。

编辑:两种方法可以解决你的sql错误。
1) 设置你的 sql_mode 没有 only_full_group_by;
2) 将group by wine_id替换为group by wine_id, cus_num

为什么会出现这个问题???

查看官方文档 Server SQL Modes .

关于mysql - 分组依据中的 SQL : count customer that never bought a product,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42852658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com