如果没有GROUP BY子句,则没有GROUP列的GROUP列(MIN(),MAX(),COUNT(),…)的混合是非法的。 Maria DB中的错误

问题描述 投票:0回答:1

我正在使用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

请帮助我。

mysql mariadb
1个回答
0
投票

无法更简单地完成任务:

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。

© www.soinside.com 2019 - 2024. All rights reserved.