如何在没有订单的情况下计算客户数量?

时间:2013-10-01 05:51:39

标签: mysql

我的MySQL数据库中有一个User表和一个Order表。一个用户可以有很多订单。

我正在尝试查找从未下过订单的用户数,并尝试了以下变体:

// Incorrect query
SELECT count(u.id)
FROM user AS u
WHERE count(u.o) = 0
LEFT OUTER JOIN order AS o
ON o.user_id = u.id
;

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:4)

SELECT COUNT(id) FROM user WHERE id NOT IN (SELECT user_id FROM order);

这很简单有效;它会为id中的所有user提供不在order内的{{1}}(即从未放置过一个)。

答案 1 :(得分:0)

您可以使用NOT EXISTS 为:

SELECT COUNT(ID) FROM USER
  WHERE NOT EXISTS ( SELECT USER_ID FROM ORDER);

答案 2 :(得分:0)

您可以使用left join

执行此操作
SELECT count(u.id)
FROM user AS u
LEFT OUTER JOIN order AS o
    ON o.user_id = u.id
WHERE o.user_id IS NOT NULL