【发布时间】:2017-03-17 08:33:41
【问题描述】:
我只有这个 MySQL 表:
Order(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 位顾客。这张桌子上的所有顾客都至少买了一瓶酒。 在上面的示例中,我期望以下内容:
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;
这个想法是让购买葡萄酒的客户进入子查询,然后将其放入传递分组葡萄酒的 where 子句中。但很明显,这个假设有问题。它返回 0 行。为什么我无法访问子查询中的值?
你们能帮我解决这个问题吗?
【问题讨论】:
-
给出样本数据和预期结果。
-
从这个表中,你可以得到每个产品曾经购买过的客户数量。如果您想获得从未购买过的人,您应该告诉我们您将客户存放在哪里。还是所有客户都在此表中?
-
@Forward,谢谢你的回复。所有客户都在此表中。我将在问题中添加此信息
-
那么您的预期结果在哪里?第二个?
标签: mysql