平均从子查询返回的列

时间:2012-07-26 18:00:30

标签: sql mysqli

是否无法平均子查询的结果?

以下是我正在与之抗争的问题:

SELECT AVG(
    SELECT SUM(`retail_subtotal`)
      FROM `order`
     WHERE `status` IN('O')
  GROUP BY `lead_id`
);

感谢您的帮助!

5 个答案:

答案 0 :(得分:10)

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

SELECT AVG(x.SubTotal)
FROM
(
    SELECT SUM(`retail_subtotal`) SubTotal
      FROM `order`
     WHERE `status` IN('O')
  GROUP BY `lead_id`
) x;

答案 1 :(得分:4)

实际上,一种更简单的查询短语的方法是没有子查询:

SELECT SUM(`retail_subtotal`)/count(distinct lead_id) as avg
FROM `order`
WHERE `status` IN ('O')

(这假设lead_id永远不会为NULL。)

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

答案 2 :(得分:2)

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

SELECT AVG(theSum)
FROM
(
    SELECT SUM(`retail_subtotal`) AS theSum
    FROM `order`
    WHERE `status` IN('O')
    GROUP BY `lead_id`
) T

答案 3 :(得分:1)

你在没有指定表的情况下进行选择。

试试这个

SELECT AVG(sum) from 
    (SELECT SUM(`retail_subtotal`) as 'Sum'
      FROM `order`
     WHERE `status` IN('O')
  GROUP BY `lead_id`
) T1;

答案 4 :(得分:1)

我认为这应该有用......

SELECT AVG(retail_sub) FROM
(
   SELECT SUM('retail_subtotal') As retail_sub
    From 'order'
    WHERE `status` IN('O')
    GROUP BY `lead_id`
) As Z