You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何筛选年上映超2部电影的年份及解决only_full_group_by报错

报错原因

你当前数据库开启了sql_mode=only_full_group_by约束,该约束要求SELECT查询列表中所有非聚合字段,必须全部出现在GROUP BY子句中。你当前的查询按照release_year字段分组,但SELECT列表中包含了title字段,同一个上映年份对应多部不同的电影,分组后数据库无法确定你要取该年份下的哪条title数据,因此触发报错。

解决方案

根据你的实际需求选择对应修改方案即可:

方案1:仅查询符合条件的年份及对应电影数量(最贴合原始需求)

如果不需要获取具体电影名称,直接删除SELECT列表中的title字段即可:

SELECT COUNT(*) AS film_count, release_year
FROM film
GROUP BY release_year
HAVING COUNT(title) > 2;

方案2:需要同时获取符合条件年份下的所有电影信息

先通过子查询筛选出上映电影超2部的年份,再关联原表匹配所有对应电影数据:

SELECT f.title, f.release_year
FROM film f
INNER JOIN (
    SELECT release_year
    FROM film
    GROUP BY release_year
    HAVING COUNT(title) > 2
) AS qualified_years ON f.release_year = qualified_years.release_year;

方案3:分组后需要展示该年份下的电影名称参考

可以用聚合函数包裹title字段,满足only_full_group_by约束:

  • 拼接该年份下所有电影名称:
SELECT COUNT(*) AS film_count, GROUP_CONCAT(title SEPARATOR '、') AS all_film_titles, release_year
FROM film
GROUP BY release_year
HAVING COUNT(title) > 2;
  • 仅取该年份下任意一个电影名称作为示例:
SELECT COUNT(*) AS film_count, ANY_VALUE(title) AS sample_film_title, release_year
FROM film
GROUP BY release_year
HAVING COUNT(title) > 2;

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:36:02