2011-09-13 42 views
4

我有一些遺留的代碼,我維護,有一個SQL查詢在那裏,我不明白。我希望這裏有人能向我解釋這個目的。查詢看起來是這樣的:MySQL「GROUP BY NULL」是做什麼的?

select * from product_performance 
where merchantid = 2151277 and clickday >= '2011-09-01' 
group by null; 

當我運行此查詢沒有group by null末,我得到44行。當我用group by null運行它時,我得到1行 - 上一組中的第一行。這裏發生了什麼,使用這個分組的目的是什麼?

回答

7

它將整個查詢分組爲一個常量值,這使得它隨機選擇一行來返回。您可以使用LIMIT 1獲得相同的結果。

請注意,此習語不是標準的SQL,並且如果您在其他數據庫中嘗試它,可能會導致錯誤。在MySQL中,您可以通過指定ONLY FULL GROUP BY SQL模式來禁用此行爲。有關更多詳細信息,請參閱the documentation

OTOH,LIMIT 1是非標準的爲好,但更廣泛的支持,並且同樣的效果可以在數據庫中符合SQL來實現:與FETCH ... ONLY條款2008年。有關詳情,請參閱this

0

嘿嘿, 讓我們在此模式下解釋: 如果你有

select emp_id, dept_id 
from employees 
group by dept_id 

,你會得到一個排,每departament,和一個EMP_ID,不能保證誰。這意味着大數據被分離出來。

如果你拍攝

select emp_id, dept_id 
from employees 
group by dept_id, emp_id 

你會被科指南和環境管理計劃分裂獲取數據。

但是,如果你group by null,這意味着你不分裂任何東西。 你有一個組。而且mysql會給你一個emp_id和一個dept,不保證從哪一行開始。