我有一个表格,其中包含许多 CD 条目,包括名称、价格和流派。我试图按流派返回平均价格,因此“摇滚”、“流行”、“另类摇滚”、“电子”和“电子屋”的平均价格。之后,我试图让它自动显示平均价格最高的流派。
表格名为“CD”,表格列为 CD.ID、CD.Title、CD.Price 和 CD.Genre
我也已经尝试过使用下面显示的这种方法。目前仅尝试为 3 种类型建立不同的平均值。
SELECT ((SELECT AVG(cdPrice) FROM CD
WHERE
CD.Genre = 'Rock') as Rock,
(SELECT AVG(cdPrice) FROM CD
WHERE
CD.Genre = 'Pop') as Pop,
(SELECT AVG(cdPrice) FROM CD
WHERE
CD.Genre = 'Electro') as Electro);
但是,由于我对“as”命令及其正确用法并不过分熟悉,因此我可能会遗漏此方法的某些内容。
最佳答案
行(几乎)总是比列容易。因此,您首先要做的是获取每种类型的 AVG
价格:
SELECT
AVG(CdPrice) as Price, Genre
FROM CD
GROUP BY Genre
第二部分是筛选出具有最高 AVG(CdPrice)
的那个。这里有几个不同的选项,这在某种程度上取决于您的要求如果两种类型的价格相同会怎样?你要两个还是随机?后者的一个简单方法是订购集合,然后选择第一行:
SELECT TOP(1)
AVG(CdPrice) as Price, Genre
FROM CD
GROUP BY Genre
ORDER BY
Price DESC
如果在平局的情况下你想要两行,你可以先找到集合的最大值,然后进行自连接以找到任何匹配项:
SELECT Price, Genre
FROM (
--First table is our avg price per genre
SELECT AVG(CdPrice) as Price, Genre FROM CD GROUP BY Genre
) as Avg
JOIN (
--Second table is the maximum avg price
SELECT MAX(Price) FROM (
SELECT AVG(CdPrice) as Price FROM CD GROUP BY Genre
) as Avg2
) as Max ON
--Join on price to find genres that have the maximum price
Avg.Price = Max.Price
或者,您可以利用 HAVING
子句来编写(可以说)更简洁的代码:
SELECT AVG(CdPrice) as Price, Genre
FROM CD
GROUP BY Genre
HAVING AVG(CdPrice) = (
SELECT MAX(Price) FROM (SELECT AVG(CdPrice) as Price FROM CD GROUP BY Genre) A
)
关于mysql - 计算多个平均值中的最大值 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29804581/