7

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

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

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

5 回答 5

12

如果你想这样做,你需要创建一个子查询。通过创建子查询,您可以为该SUM()列命名,然后AVG()为该新字段命名。

SELECT AVG(x.SubTotal)
FROM
(
    SELECT SUM(`retail_subtotal`) SubTotal
      FROM `order`
     WHERE `status` IN('O')
  GROUP BY `lead_id`
) x;
于 2012-07-26T18:02:26.557 回答
7

实际上,表达查询的更简单方法是不使用子查询:

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

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

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

于 2012-07-26T18:09:14.773 回答
2

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

SELECT AVG(theSum)
FROM
(
    SELECT SUM(`retail_subtotal`) AS theSum
    FROM `order`
    WHERE `status` IN('O')
    GROUP BY `lead_id`
) T
于 2012-07-26T18:02:29.877 回答
2

您正在进行选择而不指定表格。

试试这个

SELECT AVG(sum) from 
    (SELECT SUM(`retail_subtotal`) as 'Sum'
      FROM `order`
     WHERE `status` IN('O')
  GROUP BY `lead_id`
) T1;
于 2012-07-26T18:05:39.310 回答
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
于 2012-07-26T18:06:25.320 回答