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

SQLite按类别计算影片平均时长结果相同,求SQL语句修正

问题排查与解决

你的SQL语句存在笛卡尔积关联的问题,导致所有类别计算的都是全量影片的平均时长,而非对应类别的影片平均时长。

问题原因

你只关联了film和film_category,但category表和film_category表之间没有建立关联条件。这会让每一条影片记录(关联到film_category后)都和所有类别记录进行匹配,最终按类别分组时,每个类别下都包含了所有影片的数据,所以平均时长完全一致。

修正后的SQL语句

需要在WHERE子句中添加fc.category_id = c.category_id,建立film_category和category的关联:

SELECT c.name, AVG(f.length)
FROM film f, category c, film_category fc
WHERE fc.film_id = f.film_id
  AND fc.category_id = c.category_id
GROUP BY c.name

更清晰的写法(推荐)

使用显式的JOIN语法,能更直观地看到表之间的关联关系,避免这类遗漏:

SELECT c.name, AVG(f.length)
FROM film f
JOIN film_category fc ON fc.film_id = f.film_id
JOIN category c ON c.category_id = fc.category_id
GROUP BY c.name

这样每个类别只会关联到属于该类别的影片,计算出的就是对应类别的平均时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:50:29