2010-11-12 186 views
1

我寫了一個查詢,如下所示:這個MySQL查詢是否總是返回預期的結果?

SELECT COUNT(*) AS count, email 
    FROM sometable 
GROUP BY email 
ORDER BY count DESC 
    LIMIT 4 

我希望看到在表中的四個最重複的電子郵件條目。到目前爲止,它似乎正好返回什麼,我想:

count email 
12  [email protected] 
2  [email protected] 
2  [email protected] 
1  [email protected] 

當我不使用LIMIT,我得到了相同的結果(儘管有號數= 1更多的行)。我想知道的是LIMIT。將來,當數字發生變化時,我上面的查詢是否仍會返回四個最常用的電子郵件?或者查詢是否需要掃描整個數據庫才能保持準確?

(注:我不是試圖阻止重複,我想看到最常用的電子郵件)

+0

不確定您的意思是「還是查詢需要掃描整個數據庫才能保持準確?」 – 2010-11-12 15:43:27

+0

我的意思是,限制是否可能刪除應該包含在count中的行? – Stephen 2010-11-12 15:45:25

回答

2

我不知道。但是,如果你擔心,你可以申請一個限制子查詢:

select * 
from 
(
    SELECT COUNT(*) AS count, email 
    FROM sometable 
    GROUP BY email 
    ORDER BY count DESC 
) 
limit 4 

Alternateively,你可以做這樣的事情看到所有重複的電子郵件地址(可能返回多於或少於4):

SELECT COUNT(*) AS count, email 
    FROM sometable 
GROUP BY email 
having COUNT(email) > 1 
ORDER BY count DESC 
+0

標記爲正確的,因爲你是第一個提到'HAVING' – Stephen 2010-11-12 16:06:48

2

首先,查詢不僅會返回重複條目。看看count = 1的第4行,這意味着它在表中只出現一次。要列出你需要修改你的查詢作爲重複的記錄 -

SELECT COUNT(*) AS count, email 
FROM sometable 
GROUP BY email 
HAVING COUNT(*) > 1 
ORDER BY count DESC  
LIMIT 4 

然後,這總是會把你返回4個最上面的重複的條目在表中提到的順序。

+0

非常好,謝謝! – Stephen 2010-11-12 16:06:27