首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从AVG中选择MAX?

如何从AVG中选择MAX?
EN

Stack Overflow用户
提问于 2019-10-22 12:16:33
回答 3查看 2.3K关注 0票数 0

我正在练习我的SQL考试,我找不出以下问题:

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

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

代码语言:javascript
复制
SELECT AVG(Amount) AS 'Average amount paid'
FROM Payment;

那么,我想从这个平均值列表中检索出最高的平均金额。我认为以下几点可以达到这个目的:

代码语言:javascript
复制
SELECT MAX(AVG(Amount)) AS 'Highest average amount paid'
FROM Payment;

这似乎不管用。我得到以下错误:

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

我想在这方面有所帮助。什么是正确的方法来处理这个问题?提前谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-22 12:26:16

在Server中,您可以命令记录,并使用TOP 1只保存金额最高的记录:

代码语言:javascript
复制
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子句。没有它,它只会返回一个记录,平均付款在整个表内。

票数 1
EN

Stack Overflow用户

发布于 2019-10-22 12:19:56

尝试使用子查询:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2019-10-22 12:18:11

使用order by

代码语言:javascript
复制
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)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58504101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档