Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:按组统计从未购买过产品的客户_Mysql - Fatal编程技术网

Mysql SQL:按组统计从未购买过产品的客户

Mysql SQL:按组统计从未购买过产品的客户,mysql,Mysql,我只有这个MySQL表: 订单(客户id、葡萄酒id、价格) 一个例子 wine_id | customer_id | price 1 | 1 | 13€ 1 | 2 | 13€ 1 | 3 | 13€ 2 | 1 | 17€ 2 | 3 | 16€ 3 | 4

我只有这个MySQL表:
订单(客户id、葡萄酒id、价格)

一个例子

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位顾客。这张桌子上的所有顾客都至少买了一瓶酒。 在上面的示例中,我预计会出现以下情况:

wine_id |   count(distinct customer)
1       |   1
2       |   2
3       |   2
事实上,id为1的葡萄酒已被4位客户中的3位客户购买。。。因此,由于我想要的是从未购买过该产品的客户,因此预期结果为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;
我们的想法是进入子查询购买葡萄酒的客户,然后将其放入传递分组葡萄酒的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
看在小提琴里

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

编辑: 有两种方法可以解决sql错误。
1) 设置您的
sql\u模式
,而不使用
仅设置完整的组

2) 将
按葡萄酒id分组
替换为
按葡萄酒id、数量分组

为什么会出现这个问题


查看官方文件。

给出一个样本数据和预期结果。从该表中,您可以得到每种产品曾经购买过的客户数量。如果你想得到一个从未买过东西的人,你应该告诉我们你把你的顾客放在哪里。还是所有客户都在这张桌子上?@Forward,谢谢你的回复。所有的顾客都在这张桌子上。我会在问题中添加这些信息,那么你的预期结果是什么?第二个?谢谢!正如预期的那样,在sqlfiddle中工作良好。但是在我的MySQL上,它给了我一个错误:
error-code:1055。SELECT列表的表达式#2不在GROUP BY子句中,并且包含未聚合的列“t.cus_num”,该列在功能上不依赖于GROUP BY子句中的列;这与sql\u mode=only\u full\u group\u by不兼容