我正在练习我的SQL考试,我找不出以下问题:
在每个客户支付的平均金额中,显示最高的金额。
因此,为了检索支付的平均金额,我将执行以下操作:
SELECT AVG(Amount) AS 'Average amount paid'
FROM Payment;那么,我想从这个平均值列表中检索出最高的平均金额。我认为以下几点可以达到这个目的:
SELECT MAX(AVG(Amount)) AS 'Highest average amount paid'
FROM Payment;这似乎不管用。我得到以下错误:
无法对包含聚合或子查询的表达式执行聚合函数。
我想在这方面有所帮助。什么是正确的方法来处理这个问题?提前谢谢你。
发布于 2019-10-22 12:26:16
在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子句。没有它,它只会返回一个记录,平均付款在整个表内。
发布于 2019-10-22 12:19:56
尝试使用子查询:
SELECT MAX(src.cust_avg) AS "Highest average amount paid"
FROM (
SELECT cust_id, AVG(Amount) AS cust_avg
FROM Payment
GROUP BY cust_id -- Get averages per customer
) src
;要首先获得“每个客户”的平均值,您需要包括类似于GROUP BY cust_id的内容。
SQL Fiddle
发布于 2019-10-22 12:18:11
使用order by
select customer, avg(amount)
from payment
group by customer
order by avg(amount) desc
fetch first 1 row only;fetch first (尽管是标准的)并不是所有数据库都支持的,所以您应该使用适合您的数据库的版本。
在Server中,您将使用select top (1)或offset 0 fetch first 1 row only (可惜,offset不是可选的)。
还有一些数据库中,整数上的avg()返回整数。如果amount是一个整数,并且您的数据库这样做,那么使用avg(amount * 1.0)。
https://stackoverflow.com/questions/58504101
复制相似问题