MySQL"GROUP BY NULL"有什么作用?

bar*_*lay 4 mysql group-by

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

select * from product_performance 
where merchantid = 2151277 and clickday >= '2011-09-01' 
group by null;
Run Code Online (Sandbox Code Playgroud)

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

Ano*_*mie 7

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

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

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