2011-04-07 25 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