作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一些正在维护的遗留代码,其中有一个我不理解的 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
来禁用此行为。 SQL模式。参见 the documentation了解更多详情。
OTOH,LIMIT 1
也是非标准的,但得到更广泛的支持,并且在符合 SQL:2008 的数据库中可以通过 FETCH ... ONLY 实现相同的效果
子句。参见 this有关详细信息。
关于mysql - MySQL "GROUP BY NULL"是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7404578/
我是一名优秀的程序员,十分优秀!