2010-02-20 51 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