2016-03-26 4 views
4

私は面倒なMySQLデータテーブルで作業しています。私は引き出すレコードのグループを持っていますが、レコードは重複しています。私は適切に別の値を合計する必要があります。ここでは状況はだ...私は引き出すしたいどのようなデータダップを削除して合計を

 
    identifier category value 
     1   a   40 
     1   a   20 
     1   b   80 
     1   c   40 
     1   a   80 
     2   a   20 
     2   b   40 

考える

はこの場合、次の

 
    identifier category 
     1   200 
     2   60 

ですが、私は化合物によって定義されるように、重複を排除したいです"value"フィールドでMAXを使用するidentifier + categoryのキー。それで私は次のようになります:

 
    identifier category value 
     1   a   80 
     1   b   80 
     1   c   40 
     2   a   20 
     2   b   40 

次に、識別子に基づいて「値」を合計します。

これは私が必要としていることを知っている別の例ですが、1つのSQL文でどのように行うのかはわかりません。私は一時テーブルを使用して、その上で集計(SUM)クエリを実行することができます。しかし、私は1つのステートメントですべてを試してみたいと思います。

+0

潜水艦を使って上記の結果の上に集約を行う取得するには、各identifier + category

select identifier,category,max(value) from table1 group by identifier,category; 

Max値を取得するにはMAXを取得してからアウターセレクトでSUMを使用することを選択します。 –

+0

「別個の」値を別のクエリのインラインビューとして取得するクエリを使用します。つまり、select max ... group by ...クエリは、外部クエリのFROM句で参照されるrowsourceになります。アウト問合せは集計を実行してSUMを取得できます。 (MySQLは、派生テーブルとしてインラインビューを参照しています。) – spencer7593

答えて

2

SUM

select identifier,sum(value) as value 
from 
(
select identifier,category,max(value) as value 
from table1 
group by identifier,category 
) a 
group by identifier 
+0

遅れて申し訳ありません。私はライブデータでこれをテストしました。それは私が望むことをするようです。私が実行している課題は、クエリが非常に多くの結合で非常に複雑であることです。私は最終的に一時テーブルを最初に使用することに決めました。しかし、このソリューションは、私が必要とした2つのクエリを手助けしました。ありがとうございました!! – stockwet

関連する問題