1

我正在尝试运行以下 MySQL 查询:

mysql> SELECT num.value, agro.mean, agro.dev
    -> FROM randomNumbers num
    -> CROSS JOIN (
    ->         SELECT AVG(value) AS mean, STDDEV(value) AS dev 
    ->         FROM randomNumbers
    ->     ) agro
    -> ORDER BY num.value;

该示例来自这里http://www.sitecrafting.com/blog/stats-in-mysql-pt-outliers/,randomNumbers 只是一个随机数列表。

我收到错误:ERROR 1054 (42S22): Unknown column 'num.value' in 'field list'。当我尝试调试它时,我意识到我不知道'agro'在做什么。我认为它允许我使用前缀 agro 来引用平均值和 dev,但这并没有真正意义,我不知道为什么该语句不起作用。此语句工作正常:

mysql> select num.value from randomNumbers num;

你能帮我吗?谢谢。

4

1 回答 1

1

agro是子选择创建的结果集的别名 - 这是位于 FROM 子句中的子选择的要求,以便可以正确引用列。我不确定为什么您的查询无法正常工作。您是否尝试过自己运行子选择?

SELECT AVG(value) AS mean, STDDEV(value) AS dev FROM randomNumbers;

这可能不会解决任何问题,但尝试AS在别名之前添加。

SELECT num.value, agro.mean, agro.dev
FROM randomNumbers AS num
    CROSS JOIN (
        SELECT AVG(value) AS mean, STDDEV(value) AS dev 
        FROM randomNumbers
    ) AS agro
ORDER BY num.value;
于 2010-02-20T03:49:08.610 回答