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

如何编写第6个SQL查询计算5个已有查询结果的平均值?

嘿,这个需求很好实现,核心思路就是把每个独立的单值查询当成数据源,然后聚合计算平均值就行。我先从你给的两个查询的例子说起,再扩展到5个查询的场景。

针对你给出的两个查询示例(str1和str2)

方法1:用UNION ALL合并成多行后计算AVG

这种方法的好处是如果某个子查询返回NULL(比如没有匹配数据),AVG()函数会自动忽略这个值,容错性更高:

SELECT AVG(result) AS average_value
FROM (
    -- 第一个查询的结果
    SELECT total AS result FROM endpoints
    UNION ALL
    -- 第二个查询的结果
    SELECT total AS result FROM data
) AS subquery_results

方法2:直接计算两个值的平均值

如果能确保两个查询一定返回非NULL的单个值,可以直接用算术运算,写法更简洁:

SELECT (
    (SELECT total FROM endpoints) + (SELECT total FROM data)
) / 2 AS average_value

要是担心某个查询可能返回NULL,可以用COALESCE()把NULL转成0(或者你业务需要的默认值):

SELECT (
    COALESCE((SELECT total FROM endpoints), 0) + COALESCE((SELECT total FROM data), 0)
) / 2 AS average_value

扩展到5个查询的场景

思路和两个查询完全一致,只是多添加几个子查询即可:

方法1:UNION ALL + AVG(推荐,容错性高)

SELECT AVG(result) AS average_value
FROM (
    SELECT your_value AS result FROM query_1_table -- 替换成你的第一个查询
    UNION ALL
    SELECT your_value AS result FROM query_2_table -- 第二个查询
    UNION ALL
    SELECT your_value AS result FROM query_3_table -- 第三个查询
    UNION ALL
    SELECT your_value AS result FROM query_4_table -- 第四个查询
    UNION ALL
    SELECT your_value AS result FROM query_5_table -- 第五个查询
) AS all_subquery_results

方法2:直接算术运算(适合确定所有查询都有结果的场景)

SELECT (
    (SELECT value FROM query_1) +
    (SELECT value FROM query_2) +
    (SELECT value FROM query_3) +
    (SELECT value FROM query_4) +
    (SELECT value FROM query_5)
) / 5 AS average_value

同样,要处理NULL的话,给每个子查询套上COALESCE()就行。

关键注意事项

  • 每个子查询必须确保只返回单个数值,如果某个查询返回多行,会直接报错;
  • 根据你的业务需求选择处理NULL的方式:是忽略(用AVG的方式)还是替换成默认值(用COALESCE);
  • 如果你的查询不是简单的SELECT total FROM table,而是更复杂的聚合查询(比如SELECT COUNT(*) FROM ...),直接把整个查询放到子查询里就行,只要它返回单个值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:34:27