首页 > 解决方案 > 如何从 AVG 中选择 MAX?

问题描述

我正在为我的 SQL 考试练习,但我无法弄清楚以下问题:

“在每位客户支付的平均金额中,显示最高金额。”

因此,要检索支付的平均金额,我会执行以下操作:

SELECT AVG(Amount) AS 'Average amount paid'
FROM Payment;

然后我想从这个平均值列表中检索最高的平均值。我认为以下方法可以解决问题:

SELECT MAX(AVG(Amount)) AS 'Highest average amount paid'
FROM Payment;

这似乎不起作用。我收到以下错误:

无法对包含聚合或子查询的表达式执行聚合函数。

我想要一些帮助。解决这个问题的正确方法是什么?先感谢您。

标签: sqlsql-serversubquerysql-order-byaggregate-functions

解决方案


在 SQL Server 中,您可以对记录进行排序并使用TOP 1以仅保留数量最多的记录:

SELECT TOP 1 Customer_id, AVG(Amount) AS [Average amount paid]
FROM Payment
GROUP BY customer_id
ORDER BY [Average amount paid] DESC;

注意:要使此查询有意义,您需要一个GROUP BY子句。没有它,它只会返回一条记录,其中包含整个表中的平均付款。


推荐阅读