【发布时间】:2013-03-13 11:16:08
【问题描述】:
我只想返回拥有最昂贵电影队列的订阅者(想想如果您在给定时间丢失了所有电影,则需要 Netflix DVD 更换费用)。我使用了 MAX() 而不是 TOP、LIMIT 或 ROWNUM,因为查询需要尽可能独立于数据库,并且在出现平局时必须返回多个订阅者。使用上面的表格,结果应该是
+----------+ |最高 | +----------+ |杰米 | |诺拉 | +----------+经过大量搜索和实验,我想出了可以工作的代码,但在我的新手眼中,无论是在代码数量上还是在执行上,都显得臃肿且效率低下。
有人介意重构和解释您的代码吗?
我的代码:
SELECT z.subscriber highest
FROM
(SELECT MAX(price) max_price
FROM (
SELECT subscriber_name subscriber, SUM(replacement_price) price
FROM inventory i
INNER JOIN rented r
ON i.DVD = r.DVD
GROUP BY subscriber
) x
) y
INNER JOIN
(
SELECT subscriber_name subscriber, SUM(replacement_price) price
FROM inventory i
INNER JOIN rented r
ON i.DVD = r.DVD
GROUP BY subscriber
) z
ON z.price = y.max_price
【问题讨论】:
-
请通过添加适当的标签(Oracle、SQL Server、MySQL 等)指定您的目标关系数据库管理系统。可能有一些答案利用了不受普遍支持的语言或产品功能。此外,通过使用特定的 RDBMS 对其进行标记,您的问题可能会受到更适合回答的人的关注。
-
如果可能的话,我希望查询可以在 MySQL 和 SQL-Server 上运行。
标签: mysql sql sql-server subquery max