0
SELECT *,
       Group_concat(rating) AS rating_total,
       Sum(rating_total)    AS rating_sum,
       Avg(rating_sum)      AS rating_avg
FROM   ratings
GROUP  BY pid  

何らかの理由で、合計と平均が実行されません....このステートメントをどのように機能させますか?

4

2 に答える 2

5

SQL がクエリをコンパイルする方法のため (GROUP_CONCAT を使用しているため、MySQL を想定しています)、order by 句の前にエイリアス化された列名を参照することはできません。SUM 関数と AVG 関数は手続き型ではありません。それらは並行して行われます。つまり、依存できないということです。

次に、GROUP_CONCAT は数値ではなく文字列を返します。SUM/AVG をどのように計算しますか? 評価列自体の SUM と AVG だけです。

さて、これを考えると、次のことができます:

SELECT
    pid,
    GROUP_CONCAT(rating) AS rating_total,
    SUM(rating) as rating_sum,
    AVG(rating) as rating_avg
FROM
    rating
GROUP BY
    pid

これにより、探しているものが得られるはずです。

于 2009-05-31T08:00:49.090 に答える
0

GROUP_CONCAT は、選択したすべての値を連結した文字列を返します。次に、その文字列を合計しようとしていて、合計の平均を取得しようとしています。

連結の結果ではなく、テーブルの値に対して SUM と AVG を使用する必要があると思います。

于 2009-05-31T08:01:16.437 に答える