MySQL“GROUP BY NULL”有什么作用?

时间:2011-09-13 15:35:43

标签: mysql group-by

我有一些我正在维护的遗留代码,那里有一个我不理解的SQL查询。我希望有人可以向我解释这个目的。查询如下所示:

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

当我在最后没有group by null的情况下运行此查询时,我得到44行。当我使用group by null运行它时,我得到1行 - 前一组中的第一行。这里发生了什么,使用这个分组的目的是什么?

2 个答案:

答案 0 :(得分:7)

它通过一个常量值对整个查询进行分组,这使得它可以随机有效地选择一行来返回。您可以使用LIMIT 1获得相同的结果。

请注意,此习惯用法不是标准SQL,如果在其他数据库中尝试,可能会导致错误。在MySQL中,您可以通过指定ONLY FULL GROUP BY SQL模式来禁用此行为。有关详细信息,请参阅the documentation

OTOH,LIMIT 1也是非标准的,但是得到更广泛的支持,并且在符合SQL:2008和FETCH ... ONLY子句的数据库中可以实现相同的效果。有关详细信息,请参阅this

答案 1 :(得分:0)

合, 让我们在这种模式下解释: 如果你有

select emp_id, dept_id
from employees
group by dept_id

你会得到每一行的一行,一个emp_id,不保证是谁。 这意味着大数据会在各个部门中出现。

如果你拍摄

select emp_id, dept_id
from employees
group by dept_id, emp_id

你将获得由depts和emps分割的数据。

但是如果你group by null,这意味着你不会分裂任何东西。 你有一个小组。 而mysql会给你一个emp_id和一个dept,不能保证从哪一行开始。