0

列を平均化しようとしているときに問題が発生し、結果を合計したいのですが、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
4

3 に答える 3

0

単にこれを行う

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

ロールアップを追加すると、すべての平均が追加されます

于 2012-07-25T09:08:19.360 に答える
0
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
于 2012-07-25T07:37:45.357 に答える
0

一度に適用できる集計関数は 1 つだけです。

同じ 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;
于 2012-07-25T07:50:41.333 に答える