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

SQL如何在查询中引用查询范围外的聚合函数计算结果

筛选高于全表平均片长的短片的SQL实现

原有查询的问题

WHERE子句会先过滤出所有GenreShort = 1的短片记录,后续计算的AVG(MovieLength)仅统计了短片的平均片长,且未搭配GROUP BY直接用HAVING对比字段与聚合结果的写法也不符合标准SQL执行规则。

解决方案

方案1:标量子查询实现(全数据库兼容)

通过独立子查询计算全表所有电影的平均片长,直接放到WHERE条件中对比即可,不受外层过滤逻辑影响:

SELECT MovieTitle, MovieLength
FROM MOVIES
WHERE GenreShort = 1
  AND MovieLength > (SELECT AVG(MovieLength) FROM MOVIES);

方案2:窗口函数实现(适配支持窗口函数的数据库)

如果需要在结果中同步展示全表平均片长做参照,可以用窗口函数提前计算全表平均值后再过滤:

SELECT MovieTitle, MovieLength
FROM (
    SELECT 
        MovieTitle, 
        MovieLength,
        GenreShort,
        AVG(MovieLength) OVER () AS all_avg_length
    FROM MOVIES
) t
WHERE GenreShort = 1 
  AND MovieLength > all_avg_length;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:48:02