mysql - 计算多个平均值中的最大值 - SQL

标签 mysql sql

我有一个表格,其中包含许多 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/

相关文章:

sql - MySQL 连接两个表从第二个表计数和求和

php - mysqli::准备 SQL 错误

php - 在 session 中存储 php 变量并调用分页链接

sql - regexp_extract在Hive中查找值

java.math.BigInteger 不能转换为 java.lang.Integer

sql - 如何在sql server精简版中重命名表

mysql更新列然后选择更新的值

mysql - 用新的数据库备份替换以前的数据库备份

mysql - SQL : After joined table query, 首先将包含数据的行放在两个表中

javascript - AJAX 成功无法将数据填充到表格 HTML