首页 > 数据库 > mysql教程 > 为什么我的 MySQL GROUP BY 查询会产生'only_full_group_by”错误?

为什么我的 MySQL GROUP BY 查询会产生'only_full_group_by”错误?

Mary-Kate Olsen
发布: 2024-12-29 13:44:10
原创
197 人浏览过

Why Does My MySQL GROUP BY Query Produce a

理解 SELECT 优化问题

在 MySQL 中,当使用 GROUP BY 子句时,必须将所有非聚合列包含在功能上不依赖于分组列的 SELECT 列表。这是通过 sql_mode=only_full_group_by 设置强制执行的。

当执行查询:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`
登录后复制

时,它违反了此规则,因为 id 列不包含在 GROUP BY 子句中。这会导致错误:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'returntr_prod.tbl_customer_pod_uploads.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
登录后复制

解决方案选项

要解决此问题,有多个选项:

1。禁用 only_full_group_by 模式:

这可以使用以下命令完成:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
登录后复制

但是,不建议这样做,因为它可能会导致结果不准确。

2.在 GROUP BY 子句中包含所有列:

此选项通过在 GROUP BY 子句中显式包含所有非聚合列来确保符合 only_full_group_by 模式:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`, `id`
登录后复制

3.使用聚合函数:

查询可以利用聚合函数从分组行中提取数据,而不是选择特定列,从而在遵循最佳实践的同时解决问题:

SELECT `proof_type`, COUNT(*) AS `row_count`
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`
登录后复制

这种方法可以避免检索不必要的数据并优化性能。

以上是为什么我的 MySQL GROUP BY 查询会产生'only_full_group_by”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板