版本问题:mysql报错 > 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated

https://blog.csdn.net/weixin_44013783/article/details/119422353?ydreferer=aHR0cHM6Ly93d3cuYmFpZHUuY29tL2xpbms%2FdXJsPTJMcmVKLWlHVjZONWRObW5PX0FSbFlIbkgtbzcta0xWT3NQMFBYRzBYcW9LOE5fVzVKUVpYRUtkNkI0TXFsU1gxNjVTRV81bDU2d2d1YTJkeTB0S3JxSE9qMGpTT1lfMDVvYzA5Y1lTT1pXJndkPSZlcWlkPWZkZmQ1MzVhMDAwMDM4MzQwMDAwMDAwNDY0MzYyMzY3?ydreferer=aHR0cHM6Ly93d3cuYmFpZHUuY29tL2xpbms%2FdXJsPTJMcmVKLWlHVjZONWRObW5PX0FSbFlIbkgtbzcta0xWT3NQMFBYRzBYcW9LOE5fVzVKUVpYRUtkNkI0TXFsU1gxNjVTRV81bDU2d2d1YTJkeTB0S3JxSE9qMGpTT1lfMDVvYzA5Y1lTT1pXJndkPSZlcWlkPWZkZmQ1MzVhMDAwMDM4MzQwMDAwMDAwNDY0MzYyMzY3

附上ai回答:

A: 这个错误提示表明您正在尝试执行一个包含SELECT语句的SQL查询,该SELECT语句包含一个表达式,该表达式未包含在GROUP BY子句中,并且该表达式包含一个非聚合列,该列在GROUP BY子句中并没有被函数依赖。

 当sql_mode变量设置为only_full_group_by时,此错误会发生,该模式要求所有在SELECT子句中不包含在聚合函数(如SUM、COUNT、AVG、MAX或MIN)中的列都必须包含在GROUP BY子句中。这是一种严格的操作模式,旨在防止在分组数据时出现歧义结果。

 要解决此错误,您需要修改SQL查询,以确保SELECT子句中的所有非聚合列也包含在GROUP BY子句中。或者,您可以将sql_mode变量更改为较不严格的模式,该模式允许在SELECT子句中包含非聚合列而无需在GROUP BY子句中包含它们。但是,请注意,在某些情况下,这可能会导致产生歧义的结果。

 以下是修改SQL查询以包括所有非聚合列在GROUP BY子句中的示例:

SELECT id, AVG(temperature)
FROM iot_device_meteorological
GROUP BY id;

 在此示例中,id列包含在SELECT子句和GROUP BY子句中,这确保了查询与only_full_group_by模式兼容。

Q:怎么将sql_mode变量更改为较不严格的模式

A:要将sql_mode变量更改为较不严格的模式,您可以按照以下步骤进行操作:

 打开MySQL客户端或其他MySQL管理工具。

 使用管理员或具有适当权限的用户登录MySQL。

 运行以下命令,以查看当前的sql_mode设置:

SELECT @@sql_mode;

 复制该命令返回的结果。

 运行以下命令,以修改sql_mode设置:

SET sql_mode = '复制的结果中去掉only_full_group_by的部分';

 例如,如果当前的sql_mode设置为

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

 您可以使用以下命令将其更改为不包括ONLY_FULL_GROUP_BY的模式:

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

 运行以下命令,以确认sql_mode设置已经更改:

SELECT @@sql_mode;

 注意,更改sql_mode设置可能会影响MySQL服务器的行为,因此请在进行更改之前,仔细考虑是否需要这样做,并确保了解更改可能会产生的影响。

posted @ 2023-04-12 12:00  钱有学  阅读(88)  评论(0)    收藏  举报