SELECT *,
Group_concat(rating) AS rating_total,
Sum(rating_total) AS rating_sum,
Avg(rating_sum) AS rating_avg
FROM ratings
GROUP BY pid
何らかの理由で、合計と平均が実行されません....このステートメントをどのように機能させますか?
SELECT *,
Group_concat(rating) AS rating_total,
Sum(rating_total) AS rating_sum,
Avg(rating_sum) AS rating_avg
FROM ratings
GROUP BY pid
何らかの理由で、合計と平均が実行されません....このステートメントをどのように機能させますか?
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
これにより、探しているものが得られるはずです。
GROUP_CONCAT は、選択したすべての値を連結した文字列を返します。次に、その文字列を合計しようとしていて、合計の平均を取得しようとしています。
連結の結果ではなく、テーブルの値に対して SUM と AVG を使用する必要があると思います。