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

如何不使用CTE或子查询实现演员年参演电影数统计

无需CTE/子查询的高效实现方案

你不需要额外嵌套CTE或者子查询完成这个统计,直接在两表关联的结果集上做分组聚合即可,相比你原来的写法减少了一层中间结果集的生成开销,执行效率更高。

涉及表结构

  • actor表:字段为actor_id、first_name、last_name、last_update
  • film_actor表:字段为actor_id、film_id、last_update

可直接运行的SQL代码

SELECT
    CONCAT(a.first_name, ' ', a.last_name) AS Actor_name,
    COUNT(fa.film_id) AS Number_of_films,
    EXTRACT(YEAR FROM a.last_update) AS `Year`
FROM sakila.actor a
LEFT JOIN sakila.film_actor fa
    ON a.actor_id = fa.actor_id
GROUP BY Actor_name, `Year`
ORDER BY Actor_name ASC;

写法说明

  • 给表起简短别名(a代指actor表、fa代指film_actor表)简化语句长度,提升可读性
  • 关联逻辑和你原有写法完全一致,直接把姓名拼接、年份提取的计算逻辑下推到聚合层,跳过中间临时表的构建步骤,MySQL优化器可以直接生成「关联+聚合」的最优执行计划

逻辑提示:你原有写法中取年份用的是actor表的last_update字段,该字段记录的是演员基础信息的最后更新时间,并非参演对应电影的关联时间。如果你的实际需求是统计演员每年参演电影的数量(按参演关系建立年份计算),需要把年份提取逻辑替换为EXTRACT(YEAR FROM fa.last_update),结果才符合业务预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:09:34