首页 > 解决方案 > 根据产品名称获取最高平均价格

问题描述

我有一个产品表,其中包含三个标题,即 ProductID、ProductName 和 Price。我需要找到具有最高平均价格的产品名称。有多种产品,对于不同的产品 ID,它们也是重复的,我需要它们的平均价格。示例数据如下所示:

ProductID   ProductName Price
1   A   18
2   A   19
3   B   10
4   C   22
5   D   21.35
6   C   25
7   A   30
8   B   40
9   E   97
10  A   31

我写的查询如下:

SELECT ProductName
FROM Products
group by ProductName
order by avg(Price) desc
limit 1;

但我被告知这不是一个通用的解决方案。任何人都可以请告知,这个查询有什么问题。

标签: mysql

解决方案


您查询的唯一问题是平均价格等于最高平均价格的产品超过 1 种的情况,因为它只返回 1 行。
要涵盖这种情况,您需要再次分组并在 HAVING 子句中使用您的查询:

select productname
from products
group by productname
having avg(price) = ( 
  select avg(price) 
  from products
  group by productname
  order by avg(price) desc 
  limit 1
);

请参阅演示


推荐阅读