2011-07-18 37 views
18

如何正確地將此語句組合在一起。如何組合GROUP BY,ORDER BY和HAVING

SELECT *, COUNT(*) 
FROM user_log 
GROUP BY Email 
ORDER BY UpdateDate DESC 
HAVING COUNT(*) > 1 

讓我知道

+0

一般GROUP BY提示:「如果指定了GROUP BY子句,則SELECT列表中的每個列引用都必須標識分組列或作爲設置功能「。 – jarlh

回答

42

ORDER BY總是最後...

但是,你需要選擇你真正想要領域,然後由他們只選擇那些和組。 SELECT *GROUP BY Email會給你隨機數所有的領域,但Email。由於創建的問題,大多數RDBMS甚至不允許你這樣做,但MySQL是例外。

SELECT Email, COUNT(*) 
FROM user_log 
GROUP BY Email 
HAVING COUNT(*) > 1 
ORDER BY UpdateDate DESC 
+2

+1關於MySQL和GROUP BY的好點子 –

+0

(當你有一個「GROUP BY」)時,同樣的邏輯適用於你放入'SELECT'列表,'HAVING'子句和'ORDER BY'子句的所有字段。所以,它也適用於'ORDER BY UpdateDate'。除非'UpdateDate'依賴於'Email',否則你會得到一個相當隨機的排序。 –

-2

步驟使用組通過,通過...

Select Attitude ,count(*) from Person 
group by person 
HAving PersonAttitude='cool and friendly' 
Order by PersonName. 
+0

一般的GROUP BY規則是:「如果指定了GROUP BY子句,SELECT列表中的每個列引用都必須標識分組列或作爲設置函數的參數,」 – jarlh

-1

你的代碼應該是包含由和順序設置在具有WHILE之前group byhaving

SELECT Email, COUNT(*) 

FROM user_log 

WHILE Email IS NOT NULL 

GROUP BY Email 

HAVING COUNT(*) > 1 

ORDER BY UpdateDate DESC 
+1

好複製粘貼:P –