【问题标题】:Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause. Error in Maria DB如果没有 GROUP BY 子句,混合没有 GROUP 列的 GROUP 列 (MIN(),MAX(),COUNT(),...) 是非法的。 Maria DB 中的错误
【发布时间】:2020-04-02 05:09:17
【问题描述】:

我正在使用 MariaDB IMDB 电影数据集,并试图解决以下问题。电影表包含 id、name、rank 和 year 列

十年是连续 10 年的序列。例如,假设您的数据库中有从 1965 年开始的电影信息。那么第一个十年是 1965、1966、...、1974;第二个是 1967、1968、...、1976 等等。找出 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 列的 GROUP 列 (MIN(),MAX(),COUNT(),...) 是非法的

相同类型的查询在 Oracle DB 中运行。
http://sqlfiddle.com/#!4/cdf8e3/9

请帮帮我。

【问题讨论】:

  • 我实际上没有看到您的查询存在分组问题。您确定上述查询是您在 MariaDB 上运行的逐字记录吗?
  • MariaDB 10.1 不支持ROW_NUMBER
  • MariaDB 支持 row_number() 函数。 mariadb.com/kb/en/library/row_number
  • "MariaDB 从 10.2 开始" 您的问题被标记为 mariadb-10.1,如果不正确,请编辑标签。
  • 添加表别名后,相同的查询在OracleMariaDB 10.2+ 上运行良好

标签: mysql mariadb


【解决方案1】:

任务不能更简单地完成吗:

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。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2014-09-09
    • 2019-02-11
    • 2016-01-10
    • 2020-07-05
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多