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

SQL技术咨询:如何筛选1990年后含12部及以上影片的流派

解决方法:用HAVING子句筛选分组结果,调整分组维度

看起来你已经走对了一半,不过有两个关键问题需要调整:一是你的GROUP BY包含了PRODUCTION_YEAR,这会让你得到每个流派+年份组合的统计,而不是整个流派的汇总;二是筛选分组后数量≥12的流派,需要用HAVING子句(而不是WHERE,因为WHERE是过滤单条数据,HAVING是过滤分组后的结果)。

修正后的SQL语句

SELECT 
    GENRE_CODE AS "Genre",
    COUNT(TITLE) AS "How many titles in this genre",
    MIN(PURCHASE_PRICE) AS "Cheapest",
    MAX(PURCHASE_PRICE) AS "Most Expensive",
    AVG(PURCHASE_PRICE) AS "Average"
FROM MOVIE
WHERE PRODUCTION_YEAR > 1990
GROUP BY GENRE_CODE
HAVING COUNT(TITLE) >= 12;

关键调整说明

  • 去掉PRODUCTION_YEAR的分组和SELECT:因为你要统计的是整个流派的汇总数据,一个流派会包含多个年份的电影,把PRODUCTION_YEAR加入GROUP BY会拆分你的分组,导致统计结果是每年的细分数据,而不是流派整体。
  • 使用HAVING筛选分组:WHERE子句只能在分组前过滤单条记录,而我们需要在分组完成后,筛选出影片数量≥12的流派,这时候HAVING COUNT(TITLE) >= 12就可以实现这个需求——它会检查每个分组的影片计数,只保留符合条件的流派。
  • 可选优化:如果TITLE字段可能存在NULL值,用COUNT(*)代替COUNT(TITLE)会更准确,因为COUNT(*)会统计所有行,而COUNT(TITLE)会忽略NULL的标题。

补充说明(如果需要显示流派名称)

如果你的GENRE_CODE是编码(比如数字),想要显示流派的名称(比如"Action"、"Comedy"),可以关联对应的流派表(假设表名为GENRE,有GENRE_CODE和GENRE_NAME字段),示例如下:

SELECT 
    g.GENRE_NAME AS "Genre",
    COUNT(m.TITLE) AS "How many titles in this genre",
    MIN(m.PURCHASE_PRICE) AS "Cheapest",
    MAX(m.PURCHASE_PRICE) AS "Most Expensive",
    AVG(m.PURCHASE_PRICE) AS "Average"
FROM MOVIE m
JOIN GENRE g ON m.GENRE_CODE = g.GENRE_CODE
WHERE m.PRODUCTION_YEAR > 1990
GROUP BY g.GENRE_CODE, g.GENRE_NAME
HAVING COUNT(m.TITLE) >= 12;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:31:58