返回多年的计数总和

时间:2014-01-30 06:40:05

标签: sql azure

我正在努力寻找产生最多电影的10年期间。我有一个名为电影的表,其中包含id,name和year。

我一直想做的就是计算每年的电影数量:

SELECT year, count(id)
FROM Movie
GROUP BY year

然后使用它作为子查询,每10年一次求和,找到最大值。这是正确的方法吗?知道我哪里错了吗?

感谢任何帮助,谢谢

编辑: 好的,我能够获得每年的列表以及未来10年制作的电影数量。现在我只有使用max MovieCount返回DecadeStart时遇到了麻烦。这就是我所拥有的:

SELECT m.year AS DecadeStart, (
   SELECT COUNT(*)
   FROM Movie m2
   WHERE m2.year >= m.year AND m2.year < (m.year + 10) AND m2.year IS NOT NULL) AS MovieCount
FROM Movie m
GROUP BY m.year);

电影表中的示例输入:

45|Beach|2008
46|Affair with a Stranger|1953
47|A Letter to Uncle Sam|1913
48|A Woman Scorned|1999
50|Caryl of the Mountains|1914

到目前为止的示例输出:

DecadeStart      MovieCount
1890             3478
1891             4334
1892             5271

我想要做的是编写一个查询,该查询将从此输出中返回具有max MovieCount的行中的年份。所以我只想要DecadeStart值,而不是MovieCount

3 个答案:

答案 0 :(得分:1)

这应该有效

 SELECT DecadeStart, MAX(MovieCount)
     from (
           SELECT m.year AS DecadeStart, (
               SELECT COUNT(*)
               FROM Movie m2
               WHERE m2.year >= m.year AND m2.year < (m.year + 10) 
               AND m2.year IS NOT NULL) 
          as MovieCount
          FROM Movie m GROUP BY m.year
          ) movie ;

答案 1 :(得分:0)

如果您想要十年,如19701980等数据并且您正在使用Oracle,则以下操作:

SELECT round(year, -1) decade, count(id) cnt
  FROM movies
GROUP BY round(year, -1);

如果您正在使用其他一些RDBMS,请尝试year%10

答案 2 :(得分:0)

SQL Azure应该支持SQL Server的窗口化聚合函数:

SELECT TOP 1 
   year as DecadeStart,
   TenYearCnt
FROM
 (
   SELECT year, count(id) as cnt, 
      sum(count(id)) -- moving sum of a 10 years window
      over (order by year
            rows between current row and 9 following) as TenYearCnt
   FROM Movie
   GROUP BY year
 ) AS dt
ORDER BY TenYearCnt DESC