2012-10-11 36 views
2

我正在爲一所學校的mySQL任務工作,而我被困在一個問題上。我對mySQL仍然陌生。 COUNT(o.customer_id)不按我想要的方式工作。我希望它能夠統計訂單的數量,但它正在統計所有項目。即客戶1有2個訂單,但它正在返回3,因爲一個訂單有兩個項目。我有三個客戶一桌,另一個訂單比另一個訂單上的每個訂單都多。我在下面提出了我的問題。任何幫助都會很棒。我可以在GROUP BY之前執行COUNT()嗎

SELECT email_address, COUNT(o.order_id) AS num_of_orders, 
     SUM(((item_price - discount_amount) * quantity)) AS total 
FROM customers c JOIN orders o 
     ON c.customer_id = o.customer_id 
    JOIN order_items ot 
     ON o.order_id = ot.order_id 
GROUP BY o.customer_id 
HAVING num_of_orders > 1 
ORDER BY total DESC; 

回答

3

如使用Distinct保留字簡單:

SELECT email_address, COUNT(distinct o.order_id) AS num_of_orders 
+0

我甚至沒有想到這一點。這工作。非常感謝 – CodyK

2

看起來像要計算DISTINCT訂單數量。在COUNT中添加DISTINCT。儘管MySQL允許您在HAVING子句中使用SELECT表達式,但這並不是一個好習慣。

SELECT email_address, COUNT(DISTINCT o.order_id) AS num_of_orders, 
     SUM(((item_price - discount_amount) * quantity)) AS total 
FROM customers c JOIN orders o 
     ON c.customer_id = o.customer_id 
    JOIN order_items ot 
     ON o.order_id = ot.order_id 
GROUP BY o.customer_id 
HAVING COUNT(DISTINCT o.order_id) > 1 
ORDER BY total DESC; 
+0

更改一行,對我而言產生相同的結果。 – CodyK

+0

bups!不適用於MySQL ... http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html(請參閱第二個選擇示例) – danihp

+0

@danihp - 你說得對。我忘了MySQL多少。 – RichardTheKiwi

-1

剛取出加盟項目。當有多個項目時,它所做的是複製行。

SELECT email_address, COUNT(o.order_id) AS num_of_orders, 
     SUM(((item_price - discount_amount) * quantity)) AS total 
FROM customers c JOIN orders o 
     ON c.customer_id = o.customer_id 
GROUP BY o.customer_id 
HAVING COUNT(o.order_id) > 1 
ORDER BY total DESC; 
+0

我認爲OP從order_items獲取item_price和數量...... – danihp