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

时间:2015-04-22 17:14:25

标签: mysql sql

我有一张桌子,其中包含许多CD Entrys,包括姓名,价格和流派。我试图按类型返回平均价格,所以" Rock"," Pop"," Alternative Rock"," Electronica&#的平均价格34;,& " Electro House"。之后我会尝试让它自动显示平均价格最高的类型。

该表被称为" 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"命令及其正确用法。

2 个答案:

答案 0 :(得分:3)

行(几乎)总是比列更容易。因此,您首先要做的是获得每种类型的import random x = raw_input("Number: ") y = random.choice(range(1, x) + range(x+1, 6)) 价格:

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

答案 1 :(得分:1)

自从你提到PHP以来,假设你正在使用MySQL:

与Mark的回答相似:

select * from (
  SELECT AVG(CdPrice) as Price, Genre
  FROM CD GROUP BY Genre
)averages
order by Price desc
limit 1;

http://www.sqlfiddle.com/#!9/852cd/1