我有一些我正在维护的遗留代码,那里有一个我不明白的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行 - 前一组中的第一行.这里发生了什么,使用这个分组的目的是什么?
它通过一个常量值对整个查询进行分组,这使得它可以随机有效地选择一行来返回.您可以使用获得相同的结果LIMIT 1
.
请注意,此习惯用法不是标准SQL,如果在其他数据库中尝试,可能会导致错误.在MySQL中,您可以通过指定ONLY FULL GROUP BY
SQL模式来禁用此行为.有关详细信息,请参阅文档.
OTOH LIMIT 1
也是非标准的,但是得到了更广泛的支持,并且在符合SQL:2008和FETCH ... ONLY
子句的数据库中可以实现相同的效果.见这对上的详细信息.