选择每年利润最高的 SQL
Posted
技术标签:
【中文标题】选择每年利润最高的 SQL【英文标题】:Select highest profit from each year SQL 【发布时间】:2012-10-25 13:55:37 【问题描述】:如何获得表格中每一年的最高值。所以假设我们有一张桌子movies
,我想找到每年利润最高的电影。
这是我目前的尝试:
SELECT year, MAX(income - cost) AS profit, title
FROM Movies m, Movies m2
GROUP BY year
我很确定它需要一些子选择,但我无法想象我需要做什么。我也在想可能是某种distinct
选项来排除重复年份。
Title Year Income Cost Length
A 2000 10 2 2
B 2000 9 7 2
因此,预期的结果将是
Title Year Profit
A 2000 8
【问题讨论】:
老兄,你自己回答了你的问题。或者更具体地说明您想要实现的目标 你能说得更具体些吗 为什么你使用Movies
两次,而不是真正引用别名?
你需要知道哪部电影每年的利润最高?
您使用的是什么数据库?请用这个标记您的问题。
【参考方案1】:
我对您想要的略有猜测,但由于您没有指定任何 RDBMS,通用解决方案将是:
SELECT m.Year, (m.Income - m.Cost) AS Profit, m.Title
FROM Movies m
INNER JOIN
( SELECT m.Year, MAX(m.Income - m.Cost) AS Profit
FROM Movies
GROUP BY m.Year
) MaxProfit
ON MaxProfit.Year = m.Year
AND MaxProfit.Profit = (m.Income - m.Cost)
ORDER BY m.Year
如果您的 DBMS 允许,您也可以使用分析函数来执行此操作。例如SQL 服务器
WITH MovieCTE AS
( SELECT m.Year,
Profit = (m.Income - m.Cost),
m.Title,
RowNumber = ROW_NUMBER() OVER(PARTITION BY m.Year ORDER BY (m.Income - m.Cost) DESC)
FROM Movies
)
SELECT year, Profit, Title
FROM MovieCTE
WHERE RowNumber = 1
我可能误解了您的确切标准,但我确信可以应用相同的原则,您只需要更改第一个示例中的分组和连接,或第二个示例中的 partition by
。
【讨论】:
【参考方案2】:select m1year,m1profit,title
from
(
(select year as m1year, max(income- cost) as m1profit from movies group by year) m1
join
(select m2year, (income-cost) as m2profit ,title as profit from movies) m2
on
m1profit = m2profit
) m
【讨论】:
【参考方案3】:这将给出每年利润最高的电影,如果出现平局,则选择第一个标题:
select a.year, a.profit,
(select min(title) from Movies where year = a.year and income - cost = a.profit) as title
from (
select year, max(income - cost) as profit
from Movies -- title, year, cost, income, number
group by year
) as a
order by year desc
【讨论】:
以上是关于选择每年利润最高的 SQL的主要内容,如果未能解决你的问题,请参考以下文章