2010-02-20 4 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 это просто список случайных чисел.

Я получаю сообщение об ошибке: ERROR 1054 (42S22): Неизвестный столбец «num.value» в поле «Список полей». Когда я пытаюсь отладить его, я понял, что не знаю, что делает «агро». Я предполагаю, что это позволяет мне ссылаться на среднее значение и dev с префиксом agro, но на самом деле это не имеет смысла, и я не знаю, почему утверждение не работает. Это заявление отлично работает:

mysql> select num.value from randomNumbers num; 

Помогите? Благодарю.

ответ

1

agro - это псевдоним для результирующего набора, созданного подзапросом - это требование для подселектов, расположенных в предложении FROM, чтобы можно было правильно ссылаться на столбцы. Я не уверен, почему ваш запрос работает неправильно. Вы пробовали использовать subselect самостоятельно?

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