我正在努力寻找产生最多电影的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
答案 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)
如果您想要十年,如1970
,1980
等数据并且您正在使用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