修改SQL查询以获取所有用户?

时间:2011-04-07 09:34:05

标签: mysql

我目前有这个查询。

SELECT DISTINCT (o.customer_id), count( o.id ) AS orders, c.* 
FROM `order` AS o LEFT JOIN customer AS c ON o.customer_id = c.id 
GROUP BY customer_id

它的作用是返回所有已下订单的客户,并计算每个客户的订单数量。

我需要做的是修改此查询,以便它还返回那些尚未订购的客户。你知道怎么做吗?

我试图扭转查询,但这并没有解决问题..

SELECT DISTINCT (o.customer_id), count( o.id ) AS orders, c.* 
FROM customer AS c LEFT JOIN order AS o ON o.customer_id = c.id 
GROUP BY o.customer_id

3 个答案:

答案 0 :(得分:1)

试试这个。

SELECT o.customer_id, sum( case when o.id is not null then 1 else 0 end ) AS orders, c.* 
FROM customer  c
LEFT JOIN order o ON o.customer_id = c.id GROUP BY customer_id

答案 1 :(得分:1)

怎么样:

SELECT DISTINCT (o.customer_id), count( o.id ) AS orders, c.* 
    FROM `order` AS o 
    LEFT OUTER JOIN customer AS c ON o.customer_id = c.id GROUP BY customer_id

答案 2 :(得分:0)

SELECT o.customer_id, c.* 
FROM customer AS c LEFT JOIN order AS o ON o.customer_id = c.id 
WHERE o.id IS NULL
GROUP BY o.customer_id

您也可以跳过“GROUP BY”子句,因为当订单方为NULL时,客户始终只有一行:

SELECT o.customer_id, c.* 
FROM customer AS c LEFT JOIN order AS o ON o.customer_id = c.id 
WHERE o.id IS NULL