【发布时间】:2016-11-04 00:28:03
【问题描述】:
我正在尝试计算具有相同邮政编码的表中每一行的平均值,并按该邮政编码和年份对其进行分组。我正在尝试运行以下查询
INSERT INTO processed_clean_properties (postcode,avgYearPostcodeNorm,latitude,longitude,yearSold)
SELECT postcode, round(avg(norm)), latitude, longitude, yearSold
FROM clean_properties
GROUP BY postcode, yearSold
并得到以下错误
" SELECT 列表的表达式 #3 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列 'forge.clean_properties.latitude';这与 sql_mode=only_full_group_by 不兼容"
我已经查看过它并尝试从 sql_mode 禁用 only_full_group_by,但如果服务器重新启动它似乎无法保存任何内容,它会重置为默认值。
我也尝试将所有选定的列按条件添加到组中
INSERT INTO processed_clean_properties (postcode,avgYearPostcodeNorm,latitude,longitude,yearSold)
SELECT postcode, round(avg(norm)), latitude, longitude, yearSold
FROM clean_properties
GROUP BY postcode, norm, latitude, longitude, yearSold
这样做会使查询无限期地运行而无需实际执行任何操作。
如何更正初始查询以使用 full_group_by 条件?
【问题讨论】:
-
错误信息告诉你,你正在做一些奇怪的事情。我倾向于同意。
-
我有一个表格,每行包含一个邮政编码、纬度、经度、价格、标准化价格和年份。我正在尝试以每个邮政编码按当年的平均标准化价格分组的方式将数据插入到新表中。
-
问题是,如果
latitude和longitude在功能上依赖于postcode。如果没有,您的查询没有意义。如果是,latitude和longitude根本不应该在该表中。