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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-29 13:44:10189浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn