首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对子查询返回的列进行平均

对子查询返回的列进行平均
EN

Stack Overflow用户
提问于 2012-07-27 02:00:30
回答 5查看 13.6K关注 0票数 7

是不是不能对子查询的结果求平均?

下面是我正在与之抗争的查询:

代码语言:javascript
复制
SELECT AVG(
    SELECT SUM(`retail_subtotal`)
      FROM `order`
     WHERE `status` IN('O')
  GROUP BY `lead_id`
);
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-27 02:09:15

实际上,编写查询语句的一种更简单的方法是不使用子查询:

代码语言:javascript
复制
SELECT SUM(`retail_subtotal`)/count(distinct lead_id) as avg
FROM `order`
WHERE `status` IN ('O')

(这里假设lead_id从不为NULL。)

原始查询有问题,这不仅是因为avg()中的子查询,还因为子查询返回了多行。

票数 7
EN

Stack Overflow用户

发布于 2012-07-27 02:02:27

如果要执行此操作,则需要创建子查询。通过创建子查询,您可以为SUM()列指定一个名称,然后对新字段执行AVG()操作。

代码语言:javascript
复制
SELECT AVG(x.SubTotal)
FROM
(
    SELECT SUM(`retail_subtotal`) SubTotal
      FROM `order`
     WHERE `status` IN('O')
  GROUP BY `lead_id`
) x;
票数 12
EN

Stack Overflow用户

发布于 2012-07-27 02:02:30

当然,只需给结果列一个名称并从中进行选择:

代码语言:javascript
复制
SELECT AVG(theSum)
FROM
(
    SELECT SUM(`retail_subtotal`) AS theSum
    FROM `order`
    WHERE `status` IN('O')
    GROUP BY `lead_id`
) T
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11675265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档