2009-05-31 16 views
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 

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

答えて

5

SQLがクエリをコンパイルする方法(私はあなたがGROUP_CONCATを使用しているのでMySQLを想定している)のため、order by句の前に別名の列名を参照することはできません。 SUMおよびAVG関数は手続き的ではありませんそれらは並行して行われます。つまり、彼らは従属することはできません。

第2に、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 

これは、あなたが探しているものをあなたを取得する必要があります。

+0

downvotedがコメントを残して理由を説明できますか? – Eric

+0

私のダウンボートはありませんでしたが、GROUP BYクエリの*かもしれません。 – Andomar

+0

良いキャッチ。私は盲目的にそれを考えずにOPの行をコピーしました。変更されましたので、ヘッドアップに感謝します。 – Eric

0

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

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