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は単なる乱数のリストです。

エラーが発生しました:エラー1054(42S22):「フィールドリスト」の不明な列「num.value」。デバッグしようとすると、「agro」が何をしているのかわからないことに気づきました。接頭辞agroを使用してmeanと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 に答える