gpt4 book ai didi

mysql - only_full_group_by 模式有什么好处?

转载 作者:可可西里 更新时间:2023-11-01 06:30:26 29 4
gpt4 key购买 nike

我更新了 mysql,我从 MySQL 版本 5.6.17 升级到版本 5.7.14

因为我的 sql 查询有错误

的确,我的很多查询都是这样的:

SELECT count (id) as nbr, lic from prep WHERE key = '18'

我有这个错误:

1140 - In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'operator.preparation.orig_lic'; this is incompatible with sql_mode=only_full_group_by

经过一番研究,得知Mysql 5.7.14默认激活ONLY_FULL_GROUP_BY

为什么默认启用?

最佳解决方案(性能)是什么?禁用 ONLY_FULL_GROUP_BY 或在我的查询中添加“分组依据”?

谢谢

最佳答案

only_full_group_by = on 告诉 MySQL 引擎:当您不确定要显示什么结果并抛出错误时,不要应用 GROUP BYGroup By 明确告诉您要做什么时应用它。即,当 Group By 完整且完美时!

only_full_group_by = off 告诉 MySQL 引擎:始终应用 GROUP BY,如果您不确定要选择什么结果,请随机选择一个!

如果您正确使用GROUP BY,则不必将其关闭!

示例:

表:用户

 id   |  name
----------------
1 ali
2 john
3 ali

当您在 name 列上使用 GROUP BY 时:

SELECT * FROM users GROUP BY name;

有两种可能的结果:

  1      ali
2 john

  2      john
3 ali

MYSQL不知道选择什么结果!因为有不同的id但是都有name=ali

方案一:

只选择 name 字段:

SELECT name FROM users GROUP BY name;

结果:

  ali
john

这是一个完美的解决方案。删除使 GROUP BY 混淆的列。这意味着你知道你在做什么。通常,您不需要
这些列,但如果您需要它们,请转到 Solution3!

解决方案2:

关闭 only_full_group_by。 MYSQL 将选择两种可能的结果之一RANDOMLY!! (如果您真的不关心它会选择什么 id 也没关系,但请记住在查询后立即打开它以防止将来的 groupBys 出现意外行为)

解决方案3

使用 Aggregate 函数,如 MIN()MAX() 来帮助 MYSQL 决定它必须选择什么。

例如:

SELECT MAX(id), name FROM users GROUP BY name;

结果:

  2      john     
3 ali

它将选择具有最大idali 行。

关于mysql - only_full_group_by 模式有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45484068/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com