我正在维护一些遗留代码,其中有一个我不理解的 SQL 查询。我希望这里有人可以向我解释这样做的目的。查询如下所示:
select * from product_performance
where merchantid = 2151277 and clickday >= '2011-09-01'
group by null;
当我运行此查询时没有group by null
最后,我得到 44 行。当我用group by null
,我得到 1 行——前一组中的第一行。这里发生了什么,使用这个分组的目的是什么?
它按常量值对整个查询进行分组,这使得它有效地随机选择一行来返回。您可以使用以下方法得到相同的结果LIMIT 1
.
请注意,此习惯用法不是标准 SQL,如果您在其他数据库中尝试它,可能会导致错误。在 MySQL 中,您可以通过指定来禁用此行为ONLY FULL GROUP BY http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_only_full_group_bySQL 模式。看文档 http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html更多细节。
OTOH, LIMIT 1
也是非标准的,但支持更广泛,并且在符合 SQL:2008 的数据库中可以达到相同的效果FETCH ... ONLY
条款。看this http://www.postgresql.org/docs/current/static/sql-select.html#SQL-LIMIT详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)