PostgreSQL中分组查询性能对比:文本GROUP BY vs 整数分组CTE
如何高效查询至少包含2名演员的视频?
现有两张关联的数据表:
play表:用于关联视频与演员,包含video_id(对应视频ID)、actor_id(对应演员ID)字段videos表:存储视频基础信息,包含id(视频唯一ID)、title(视频标题)字段
以下是三种实现方案:
方案一:基于文本类型属性使用GROUP BY
关联两张表后,直接按视频标题分组,筛选分组后关联演员数量≥2的视频:
select v.title from play join videos v on play.video_id = v.id group by v.title having count(v.title) >= 2;
方案二:使用CTE结合SELECT(基于整数类型属性分组)
先通过CTE筛选出关联演员数量≥2的视频ID,再通过子查询匹配对应的视频标题:
with req as ( select video_id from play group by video_id having count(*) >= 2 ) select title from videos where videos.id in (select video_id from req);
方案三:使用CTE结合JOIN(基于整数类型属性分组)
先通过CTE筛选出关联演员数量≥2的视频ID,再通过JOIN关联匹配对应的视频标题:
with req as ( select video_id from play group by video_id having count(*) >= 2 ) select title from videos join req on videos.id = req.video_id;
内容的提问来源于stack exchange,提问作者Nymau
相关产品推荐
相关产品推荐

