从每年SQL中选择最高利润

时间:2012-10-25 13:55:38

标签: sql select sqlplus

如何在表格中获得每年的最高价值。所以我们假设我们有一张表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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这将为每年提供最高利润的电影,并在出现平局时选择第一个标题:

 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