SQL GROUP_CONCAT + SUM + AVG

Posted

技术标签:

【中文标题】SQL GROUP_CONCAT + SUM + AVG【英文标题】: 【发布时间】:2010-10-30 05:12:17 【问题描述】:
SELECT *,
       Group_concat(rating) AS rating_total,
       Sum(rating_total)    AS rating_sum,
       Avg(rating_sum)      AS rating_avg
FROM   ratings
GROUP  BY pid  

由于某种原因,总和和平均值不执行....您如何使此语句起作用?

【问题讨论】:

【参考方案1】:

由于 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

这应该会为您提供所需的内容。

【讨论】:

不是我的反对意见,但它可能是 GROUP BY 查询中的 *。 好收获。我没有考虑就盲目地复制了OP的行。已更改,感谢您的提醒。【参考方案2】:

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

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

【讨论】:

以上是关于SQL GROUP_CONCAT + SUM + AVG的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter:选择行的 SUM 给出 SUM 乘以 GROUP_CONCAT 结果?

如何在 MySql 的 CONCAT 和 SUM VALUES 中使用 GROUP_CONCAT

SQL第一行结果相反

sql注入中联合查询group_concat位置

SQL左连接和group_concat返回重复数据

sql 分组查询额外值(group_concat 的使用)