2010-02-20 47 views
1

我试图运行下面的MySQL查询:问题与CROSS JOIN和参考,字段列表错误在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仅仅是一个随机数的列表。

我收到错误:错误1054(42S22):'字段列表'中的未知列'num.value'。当我尝试调试它时,我意识到我不知道'agro'在做什么。我认为它允许我用agro前缀引用mean和dev,但它没有意义,我不知道为什么该语句不起作用。此声明正常工作:

mysql> select num.value from randomNumbers num; 

你能帮忙吗?谢谢。

回答

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; 
+0

谢谢,问题解决...我已经选中了缩进,但应该使用空格.... – John 2010-02-21 20:20:21