我开始学习SQL并且我正在进行这项练习:我有一个“书籍”表,其中包含每本书的信息(包括价格和流派ID)。 我需要得到平均价格最高的类型的名称。我想我首先需要按类型对价格进行分组,然后检索最高的名称..
我知道我可以通过以下方式获得结果GENRE VS COST:
select b.genre,
round(avg(b.price),2) as cost
from books b
group by b.genre;
我的问题是,要从该结果中获得AVG价格最高的类型,我是否必须制作:
select aux.genre
from (
select b.genre,
round(avg(b.price),2) as cost
from books b
group by b.genre
) aux
where aux.cost = (select max(aux.cost)
from (
select b.genre,
round(avg(b.price),2) as cost
from books l
group by b.genre
) aux);
这是不好的做法还是不是另一种方式?我得到了正确的结果,但是我不能轻易地创建两次相同的选择。
我没有使用PL SQL,所以我不能使用变量或类似的东西..
任何帮助将不胜感激。 提前谢谢!
答案 0 :(得分:1)
with avg_price as (
select b.genre,
round(avg(b.price),2) as cost
from books b
group by b.genre
)
select genre
from avg_price
where cost = (select max(cost) from avg_price);
(这是ANSI标准SQL,适用于所有现代DBMS)
答案 1 :(得分:0)
在MS-SQL中,您可以这样做:
SELECT TOP 1 genre, ROUND(AVG(price),2) AS cost
FROM books
GROUP BY genre
ORDER BY ROUND(AVG(price),2) DESC
(TOP子句是特定于MS-SQL的,但在其他DBMS中有类似的构造)
答案 2 :(得分:0)
select top 1
genre,
avg(b.price) as cost
from books
group by
genre
order by
cost desc