Mysql函数错误到SUM [重复]

Posted

技术标签:

【中文标题】Mysql函数错误到SUM [重复]【英文标题】:Mysql function error to SUM [duplicate] 【发布时间】:2017-03-20 22:19:42 【问题描述】:
SELECT first_name, last_name, SUM(amount)
FROM customer
LEFT JOIN payment
ON customer.customer_id=payment.amount
ORDER BY amount DESC
LIMIT 10;

我收到错误:

#1140 - 在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #1 包含非聚合列 'sakila_tak14.customer.first_name';这与 sql_mode=only_full_group_by 不兼容

【问题讨论】:

添加GROUP BY 子句。 加入也很可疑:payment.customer_id 或者我会想到的。 【参考方案1】:

V5.7.5 及以上版本的 mysql 实现了对聚合函数的更严格使用,并且不允许在选择列表和 ORDER BY 列表(或 HAVING 子句)中使用非聚合列。见:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

您也不能按金额列订购并获得您的预期订单(如果您将设置 ONLY_FULL_GROUP_BY 设置为 false 选项) - 因为您已经对其求和并且结果列将不再称为金额 - 您需要使用别名.

您需要按名字和姓氏分组:

SELECT first_name, last_name, SUM(amount) summedammount
FROM customer LEFT JOIN payment
ON customer.customer_id=payment.amount
GROUP BY first_name, last_name
ORDER BY summedammount DESC
LIMIT 10;

将系统变量 ONLY_FULL_GROUP_BY 设置为 false,或使用 ANY_VALUE 函数:

SELECT ANY_VALUE(first_name), ANY_VALUE(last_name), SUM(amount) summedammount
FROM customer
LEFT JOIN payment
ON customer.customer_id=payment.amount
ORDER BY summedammount DESC
LIMIT 10;

【讨论】:

在 5.7.5 及更高版本中识别此功能/更改很高兴知道!很高兴看到 MySQL 早期版本中扩展的 Group By 子句正在重新访问。【参考方案2】:

您已将数量设为聚合,因此您需要对所有非聚合字段进行分组。试试这个:

SELECT first_name, last_name, SUM(amount)
FROM customer LEFT JOIN payment
ON customer.customer_id=payment.amount
GROUP BY first_name, last_name
ORDER BY amount DESC LIMIT 10;

【讨论】:

GROUP BY 应该在 ORDER BY 之前。 @Ullas 谢谢。我修好了。

以上是关于Mysql函数错误到SUM [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP函数返回MySQL语法错误[重复]

使用函数 SUM() 和 Group by 将 Mysql 查询转换为 SQL 查询

mysql 如何让sum函数保留小数位

错误:调用未定义的函数 mysql_query() [重复]

MySQL JOINING 同一张表在 SUM() 上返回错误结果 [重复]

mySQL JOIN 用法 [重复]