我收到一个错误,即:
"列'Weather.cityName'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中"。
为什么这里有必要使用GROUP BY
?
SELECT cityName , MAX (highTemperature) As highTemperature
FROM Weather
WHERE cityName = 'Rawalpindi';
为什么有必要使用 GROUP BY
. 您有一个聚合查询,您希望每个城市返回一行 - 即使只有一个城市。 这使查询成为聚合查询。 您可以调整查询,使其不需要。 以下是两种方法:
SELECT MAX(cityName) as cityName, MAX(highTemperature) As highTemperature
FROM Weather
WHERE cityName = 'Rawalpindi';
或:
SELECT 'Rawalpindi' as cityName, MAX(highTemperature) As highTemperature
FROM Weather
WHERE cityName = 'Rawalpindi';
这两者都是有效的聚合查询,没有GROUP BY
。 因此,它们将只返回一行 - 即使没有行与 WHERE
子句匹配。 代替CityName
,他们使用聚合函数或常量,所以没有问题。
MySQL允许使用以下语法:
组的 MySQL 处理 由
SQL:1999 及更高版本允许每个可选功能进行此类非聚合 T301 如果它们在功能上依赖于 GROUP BY 列:如果这样的 名称和客户之间存在关系,查询是合法的。这 例如,如果 custid 是主键 客户。
MySQL 5.7.5 及更高版本实现了功能依赖性的检测。如果 启用ONLY_FULL_GROUP_BY SQL模式(默认情况下(, MySQL 拒绝选择列表、具有条件或 ORDER BY 列表是指未在 中命名的非聚合列 GROUP BY 子句在功能上也不依赖于它们。
SELECT cityName , MAX(highTemperature) As highTemperature
FROM Weather
WHERE cityName IN('Rawalpindi', 'Delphi');
-- In aggregated query without GROUP BY,
-- expression #1 of SELECT list contains nonaggregated column 'cityName';
-- this is incompatible with sql_mode=only_full_group_by
SELECT cityName , MAX(highTemperature) As highTemperature
FROM Weather
WHERE cityName = 'Rawalpindi';
数据库<>小提琴演示