2011-04-07 30 views
0

我目前有这个查询。修改SQL查询以获取所有用户?

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 
+0

你已经写了'DISTINCT(o.customer_id)'那么需要什么 'GROUP BY customer_id' – diEcho 2011-04-07 09:41:47

+0

这个distinct在t中什么都不做他的情况.. – 2011-04-07 09:43:27

+0

你试过用'RIGHT JOIN'吗? – diEcho 2011-04-07 09:51:45

回答

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

什么:

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 
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