【问题标题】:SQL GROUP_CONCAT + SUM + AVGSQL 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  

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

【问题讨论】:

    标签: sql mysql sum group-concat average


    【解决方案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,而不是连接的结果。

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多