2013-06-28 58 views
0

我試圖採取「高爾特理髮於2006年8月26日」的建議在這裏不同的優化: http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html的MySQL DISTINCT查詢與子查詢優化

我的查詢是這樣的:

SELECT COUNT(`pUserDirectLabor`.`pDate`) as `daysWorked` 
FROM (SELECT DISTINCT `user_direct_labor`.`date` as `pDate` 
     FROM user_direct_labor 
     GROUP BY user_direct_labor.`date`) 
AS pUserDirectLabor, user_direct_labor 

只有在這裏查詢1個表。該表爲user_direct_labor,列爲date,這是日期時間類型。該表有12行。 2013-06-28 00:00:00格式中有6個獨特日期。

如果我自己運行子查詢,我會返回6個數據庫中所有具有唯一日期的行。

當我加入count()時,結果變成54.我不確定54是從哪裏來的。我是子查詢的新手。

如果我將其更改爲COUNT(1),它仍然返回54.我不確定爲什麼要使用COUNT(1),但這是這個人正在談論的內容。 How to express count(distinct) with subquery in MySQL?

任何人都可以給我任何指針?

+0

想通了。子查詢之後的表是問題。不知道爲什麼,但刪除修復它。 – phpmeh

+0

',table'與表導致了一個交叉產品(它相當於一個條件對所有行對都成立的連接)。 – Barmar

+0

我不確定你爲什麼得到54.如果表格有12行,它應該是6 * 12 = 72。 – Barmar

回答

0

你可以做簡單的像這樣:

SELECT `date` as `pDate` , COUNT(*) as `daysWorked` 
    FROM user_direct_labor 
    GROUP BY `date`