2013-07-31 64 views
1

我正在嘗試查找當前周的記錄數。 我當前的查詢是:Mysql count()獲取錯誤結果

SELECT Week(Str_to_date(products_options_values, '%m-%d-%Y'), 1) AS order_week, 
     Year(Str_to_date(products_options_values, '%m-%d-%Y')) AS order_year, 
     order_active, 
     Count(op.sub_order_id) AS deliveries 
FROM orders_products_attributes opa 
     LEFT JOIN orders_products op 
       ON (opa.orders_products_id = op.orders_products_id) 
GROUP BY order_week, 
      order_year 
HAVING order_week = '31' 
     AND order_year >= '2013' 
     AND order_active = 0 
ORDER BY order_week 

它獲取deliveries AS 2作爲地方實際上有4條記錄,如果我刪除COUNTGROUP BY後運行相同的查詢,它正確地顯示所有4行。同樣的問題也會在其他幾周發生,例如第34周有3條記錄,但上面的查詢將其作爲4取而代之。此外,另一個奇怪的是,在GROUP BY子句中,如果我刪除order_weekorder_year中的任一個,查詢將返回一個空的結果集。

任何想法我做錯了什麼?

+1

一些示例數據將是很好 –

回答

0

嘗試將所有HAVING條件移入WHERE。另外Count(id) - 統計ID的UNIQUE值不是全部。如果你需要的所有記錄計數只使用COUNT(*)

SELECT Week(Str_to_date(products_options_values, '%m-%d-%Y'), 1) AS order_week, 
     Year(Str_to_date(products_options_values, '%m-%d-%Y')) AS order_year, 
     order_active, 
     Count(op.sub_order_id) AS deliveries 
FROM orders_products_attributes opa 
     LEFT JOIN orders_products op 
       ON (opa.orders_products_id = op.orders_products_id) 
WHERE order_week = '31' 
     AND order_year >= '2013' 
     AND order_active = 0 

GROUP BY order_week, 
      order_year 
ORDER BY order_week 
+0

由於order_week和order_year上是別名,我不能把它們放在哪裏。和所有sub_order_ids都是唯一的,但我也嘗試過*,並且返回了相同的錯誤 – Bluemagica

+0

@aoi Ok然後只需將'order_active = 0'條件移動到 – valex

+0

主要問題實際上是有一個名爲order_week的實際列。 但是將order_active移動到WHERE也有幫助...謝謝 – Bluemagica