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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用函数 SUM() 和 Group by 将 Mysql 查询转换为 SQL 查询
错误:调用未定义的函数 mysql_query() [重复]