<!–
MySQL中SELECT列不在GROUP BY子句中,并且包含非聚合列
在使用MySQL进行查询时,我们可能会遇到以下错误提示:
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'table.column' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
这个错误提示表示查询语句中的SELECT列不在GROUP BY子句中,并且涉及到非聚合列,这在 5.7.5之后的版本中是不被允许的。让我们来看一个具体的例子:
假设我们有一个订单表order,其中包含订单编号(order_id)、订单金额(order_amount)和订单时间(order_time)三个字段。我们想按照订单时间分组,并计算每个分组的订单金额之和。
(adsbygoogle = window.adsbygoogle || []).push({});
以下是错误的查询语句:
SELECT order_time, order_amount
FROM order
GROUP BY order_time;
这个查询语句将返回上述错误提示。
原因是我们在SELECT语句中选择了两个列,但是在GROUP BY语句中仅指定了一个列。换言之,我们将order_time作为GROUP BY子句的选择,但是同时也选择了非聚合列order_amount。这个问题可以通过将order_amount列聚合函数处理来解决。例如,我们可以使用SUM()函数计算每个分组的订单金额之和:
SELECT order_time, SUM(order_amount)
FROM order
GROUP BY order_time;
上面的查询语句将按照订单时间分组,并计算每个分组的订单金额之和。
阅读更多:
总结
在MySQL中,当查询语句中SELECT列不在GROUP BY子句中,并且涉及到非聚合列时,会发生一个只允许在严格模式(sql_mode=only_full_group_by)下出现的错误。为了避免这个错误,我们需要在查询语句中使用聚合函数来处理非聚合列。
(adsbygoogle = window.adsbygoogle || []).push({});