SQL GROUP_CONCAT + SUM + AVG

时间:2009-05-31 07:54:48

标签: sql mysql sum group-concat average

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

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

2 个答案:

答案 0 :(得分: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

这可以帮到你找到你想要的东西。

答案 1 :(得分:0)

GROUP_CONCAT返回一个字符串,连接所有选定的valuse。然后,你试图对该字符串求和,然后你试图得到总和的平均值。

我认为您需要对表中的值使用SUM和AVG,而不是连接的结果。