Проблема с CROSS JOIN и ссылками, ошибка списка полей в запросе MySQL - PullRequest
1 голос
/ 20 февраля 2010

Я пытаюсь выполнить следующий запрос 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» в «списке полей». Когда я попытался отладить его, я понял, что не знаю, что делает «агро». Я предполагаю, что это позволяет мне ссылаться на среднее и dev с префиксом agro, но на самом деле это не имеет смысла, и я не знаю, почему это утверждение не работает. Это утверждение отлично работает:

mysql> select num.value from randomNumbers num;

Вы можете помочь? Спасибо.

1 Ответ

1 голос
/ 20 февраля 2010

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;
...