我有一张桌子,其中包含许多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"命令及其正确用法。
答案 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;