当运行将 SELECT COUNT 和 SELECT 与 GROUP BY 组合在一起的 MySQL 查询时,它是可能会遇到结果数量差异的情况。这背后的原因通常是臭名昭著的错误消息,“‘field_name’不在 GROUP BY 中”。
要理解该错误,让我们分解问题:
GROUP BY 根据一个或多个指定列的值将行分组在一起。在我们的例子中,使用 GROUP BY 的查询具有类似 GROUP BY name 的子句。这意味着只有具有唯一名称值的行才会被分组。
SQL92 最初要求 SELECT 子句中的所有列也位于 GROUP BY 子句中。然而,SQL99 放松了这一限制,允许在功能上依赖于 GROUP BY 列的列包含在 SELECT 子句中。
MySQL 默认情况下允许“部分分组依据”,这意味着它允许GROUP BY 子句中未显式显示的 SELECT 子句。但是,这可能会导致不确定的结果。
要解决此问题,请确保 SELECT 子句中的所有列都是 GROUP BY 子句的一部分,或者在功能上依赖于它。在我们的示例中,需要将类型、语言和代码添加到 GROUP BY 子句中:
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name`, `type`, `language`, `code` ORDER BY `count` DESC LIMIT 0, 25
MySQL 还提供了一个设置,@ @sql_mode,可以设置为强制执行完整分组依据:
set @@sql_mode='ONLY_FULL_GROUP_BY';
使用此设置,任何没有完整分组依据的查询将导致错误。
以上是为什么 MySQL 会抛出'不在 GROUP BY 中”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!