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 结果?