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 编译查询的方式(我假设 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

这应该可以为您提供所需的东西。

于 2009-05-31T08:00:49.090 回答
0

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

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

于 2009-05-31T08:01:16.437 回答