-1

テーブル内の各年の最高値を取得するにはどうすればよいですか? テーブルが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
4

3 に答える 3

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 by2番目の例でグループ化と結合を変更するだけで済みます。

于 2012-10-25T14:08:27.807 に答える
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
于 2012-10-25T14:08:56.190 に答える
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
于 2012-10-25T14:09:25.557 に答える