我正在使用MariaDB IMDB电影数据集,我正在尝试解决以下问题。电影表包含ID,名称,等级和年份列
十年是连续10年的序列。例如,假设您的数据库中有从1965年开始的电影信息。那么第一个十年是1965、1966,...,1974;第二个是1967、1968,...,1976等。找出电影D最多,电影D总数最多的十年D。
当我尝试执行以下查询时,出现以下错误
SELECT
SUM(T3.MOVIE_PER_YEAR),
T3.GROUP_PER_DECADE
FROM
(
SELECT
CEIL(T2.ROW_NUM/10) AS GROUP_PER_DECADE,
T2.MOVIE_PER_YEAR,
T2.YEAR
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY T1.YEAR ASC) AS row_num,
T1.MOVIE_PER_YEAR,
T1.YEAR
FROM
(SELECT
COUNT(M.id) AS MOVIE_PER_YEAR
,M.year
FROM
movies M
GROUP BY
M.year
)T1
)T2
)T3 GROUP BY GROUP_PER_DECADE;
错误:-
如果没有GROUP BY子句,则将GROUP列(MIN(),MAX(),COUNT(),...)与GROUP列混合使用是非法的
相同类型的查询在Oracle DB中工作。http://sqlfiddle.com/#!4/cdf8e3/9
请帮助我。
无法更简单地完成任务:
SELECT FLOOR(year / 10) * 10 AS decade,
COUNT(*) AS movies_per_decade
FROM Movies
[例如,假设1980年至1989年都是“ 1980年代”。
如果您想“提前几十年”,请更改为FLOOR(YEAR(NOW() - year) / 10) AS decades_ago
。
(这将适用于任何版本的MySQL / MariaDB。