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

SQL查询如何同时显示平均值并将其作为筛选条件?

需求说明

查询people表中年龄高于全表人员平均年龄的记录,结果需要同时返回人员姓名、年龄、全表平均年龄三个字段,平均年龄为固定常数,在每一行结果中都展示。
原有代码仅能返回姓名和年龄,无法携带平均年龄字段:

SELECT name, age FROM people
    WHERE age > (SELECT AVG(age) FROM people);
可行实现方案

方案1:通用标量子查询写法(全数据库版本兼容)

直接将计算全表平均年龄的标量子查询加入SELECT字段列表即可,该子查询仅返回单个固定值,会自动填充到所有结果行中,和原有筛选逻辑完全一致,兼容所有主流SQL数据库:

SELECT
  name,
  age,
  (SELECT AVG(age) FROM people) AS average
FROM people
WHERE age > (SELECT AVG(age) FROM people);

方案2:窗口函数写法(新版本数据库推荐,性能更优)

如果使用的数据库支持窗口函数(MySQL 8.0+、PostgreSQL、SQL Server 2012+、SQLite 3.25+等),可以通过空OVER()子句的窗口函数直接计算全表平均年龄附加到每行,避免重复执行两次平均年龄计算,大表场景下性能更好:

WITH people_with_global_avg AS (
  SELECT
    name,
    age,
    AVG(age) OVER () AS average
  FROM people
)
SELECT name, age, average
FROM people_with_global_avg
WHERE age > average;
预期返回结果

两种写法执行后输出格式完全符合要求:

name     age     average
Mick      18        17.5
Sarah     25        17.5
Joe       38        17.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:57:54