【问题标题】:Sum after Averaging in MYSQL Query在 MYSQL 查询中求和后求和
【发布时间】:2012-07-25 07:21:17
【问题描述】:

当我尝试对列进行平均处理然后我想对结果求和时遇到了麻烦,我正在使用 MYSQL 来执行此操作。谁能帮我?这是无效的查询:

SUM(IF(AVG(Value)=3,1,0)) AS green

完整查询:

SELECT
  cluster,
  SUM(IF(AVG(Value) AS Value = 3,1,0)) AS green
FROM network
WHERE date>= '2012-07-01'
    AND date<= '2012-07-02'
    AND Region = 'SOMEREG'
    AND cluster IS NOT NULL
GROUP BY cluster

【问题讨论】:

  • 你能把表结构连同完整的查询和group by子句的详细信息一起发布吗?
  • 我已经更新了查询,我会等待答案;)
  • 如果 avg(value) = 3,您似乎想显示值的计数或总和。我说的对吗?

标签: mysql sum average


【解决方案1】:
That should not be an if, but a where in the select statement.

SELECT cluster,
SUM(Value) AS sumValue AVG(Value) AS avgValue
FROM network
WHERE date>= '2012-07-01'
AND date<= '2012-07-02'
AND Region = 'SOMEREG'
AND ((AVG(Value) = 3) OR (AVG(Value) = 1) OR (AVG(Value) = 0))
AND cluster IS NOT NULL
GROUP BY cluster

【讨论】:

  • @George Aguirre:您自己先尝试查询了吗??
  • 真相查询是:SELECT cluster, SUM(IF(AVG(Value)=3,1,0)) AS green, SUM(IF(AVG(Value)=2,1,0) ) 为黄色,SUM(IF(AVG(Value)=1,1,0)) 为红色,来自表 WHERE date>= '2012-07-01' AND date
【解决方案2】:

只需这样做

SELECT
  IFNULL(cluster,'Total'),
  SUM(IF(AVG(Value) AS Value = 3,1,0)) AS green
FROM network
WHERE date>= '2012-07-01'
    AND date<= '2012-07-02'
    AND Region = 'SOMEREG'
    AND cluster IS NOT NULL
GROUP BY cluster with roll up

添加汇总将添加所有平均值

【讨论】:

    【解决方案3】:

    您一次只能应用一个聚合函数。

    同一个 group by 子句的多个聚合函数没有意义。 您需要创建派生表来查找平均值的总和。试试:

    SELECT SUM(green) AS green
    FROM (
          SELECT cluster,
                 IF(AVG(Value) = 3, 1, 0) AS green
          FROM network
          WHERE date BETWEEN '2012-07-01' AND '2012-07-02'
                AND Region = 'SOMEREG'
                AND cluster IS NOT NULL
          GROUP BY cluster
         ) a;
    

    【讨论】:

    • 那么,如何求和平均结果?有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多