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

如何通过SQL GROUP BY操作排除包含指定类型的电影数据?

修改SQL以排除含指定类型的电影结果

现有三张表:movies(电影表)、genres(类型表)、moviesgenres(电影与类型的关联中间表),执行以下分组查询SQL:

select mov.name, count(mgen.genreId)
from movies mov
inner join moviesGenres mgen
  on mov.id = mgen.movieId
inner join genres gen 
  on mgen.genreid = gen.id 
group by mov.name
having count(mgen.genreId) > 2

原查询返回结果如下:

Bad Boys 3
Novelty 3

已知Bad Boys包含Comedy类型,需求为仅保留不含Comedy类型的电影结果(即仅保留Novelty 3),以下两种方式均可实现需求:

方法一:用NOT EXISTS预筛选排除含Comedy的电影

select mov.name, count(mgen.genreId)
from movies mov
inner join moviesGenres mgen
  on mov.id = mgen.movieId
inner join genres gen 
  on mgen.genreid = gen.id 
-- 筛选出未关联Comedy类型的电影
where not exists (
    select 1
    from moviesGenres mgen2
    inner join genres gen2 on mgen2.genreid = gen2.id
    where mgen2.movieId = mov.id
      and gen2.name = 'Comedy'
)
group by mov.name
having count(mgen.genreId) > 2

思路:通过子查询检查当前电影是否关联了Comedy类型,用NOT EXISTS直接排除这类电影,再执行原有的分组统计逻辑。

方法二:在HAVING子句中排除含Comedy的分组

select mov.name, count(mgen.genreId)
from movies mov
inner join moviesGenres mgen
  on mov.id = mgen.movieId
inner join genres gen 
  on mgen.genreid = gen.id 
group by mov.name
having count(mgen.genreId) > 2
   -- 确保当前电影的类型中没有Comedy
   and sum(case when gen.name = 'Comedy' then 1 else 0 end) = 0

思路:在分组后的筛选逻辑中,新增统计当前电影分组里Comedy类型的数量,要求该数量为0,以此排除包含Comedy类型的电影。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:25