SQL GROUP_CONCAT + SUM + AVG

0 mysql sql average sum group-concat

SELECT *,
       Group_concat(rating) AS rating_total,
       Sum(rating_total)    AS rating_sum,
       Avg(rating_sum)      AS rating_avg
FROM   ratings
GROUP  BY pid  
Run Code Online (Sandbox Code Playgroud)

由于某种原因,总和和平均值不执行....你如何使这个陈述有效?

Eri*_*ric 5

由于SQL编译查询的方式(我假设MySQL使用GROUP_CONCAT),因此不能在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
Run Code Online (Sandbox Code Playgroud)

这应该可以满足您的需求.