使用两个单独的表按类别查找最大值

时间:2012-11-20 23:17:02

标签: sql

基本上我正在做一家电影租赁公司数据库。 我需要能够提供比其他类别的其他电影赚更多钱的电影的名称。

目前,我有一张产品表和租赁表。

Product – 
Attributes: (Product_ID, Product_Title, Rating, Release_Date, Genre, Length_of_Movie, Director_Name, Key_Actor, Num_Copies)
PK – Product_ID

Rental – 
Attributes: (Rental_ID, Member_ID, Product_ID, Date_Rented, Date_Returned)
PK – Rental_ID
FK – Member_ID, Product ID

每个租金的价值为1.00美元。我能够获得所有租金的收入,但我很难按流派或类别来获得。我通过这个查询获得了整体收入:

Select sum(count(Rental_ID) *1) as Revenue 
from Rental
Group by Rental_ID;       

* * 每个租金都是1.00美元,所以这是一个简单的计算,只计算一个独特的租赁号码创建的次数,并乘以固定费用。

我现在需要打破这一点,并为每种类型或类别提供最高收入。我完全难过......任何帮助都会受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

我没有测试过这个,但是:

我创建了一个视图来获得每个产品的收入,如此

Create View RevenuePerProduct As
Select
  r.Product_ID,
  Count(*) As Revenue -- as $1/rental we can just count
From
  Rental r
Group By
  r.Product_ID

要获得Genre的最高收入,您可以使用该视图,我将创建另一个名为MaxRevenueByGenre的视图。

Create View MaxRevenueByGenre As
Select
  p.Genre,
  Max(rpp.Revenue) As MaxByGenre
From 
  RevenuePerProduct rpp
    Inner Join
  Product p
    On rpp.Product_ID = p.Product_ID
Group By
  p.Genre

要获得具有每种类型最大收入的产品(或多个产品),因为您需要两次参考收入部分,这样会有点棘手。您会注意到两个视图都已使用。

Select
  best.Genre,
  best.ProductTitle,
  rpp.Revenue
From
  Product best
    Inner Join
  RevenuePerProduct rpp
    On best.Product_ID = rpp.Product_ID
    Inner Join 
  MaxRevenueByGenre mpg
    On best.Genre = mpg.Genre And rpp.Revenue = mpg.MaxByGenre

如果每个类型都与最高收入者并列,这将产生多个结果。

如果您愿意,可以通过替换括号内的视图的select语句来获取视图。