2016-04-15 11 views
0

私はPostgresで条件付き集計を行いたいと思います。私はid列とfloat items列のテーブルを持っています。ポストグルで条件付き集計を行うには?

私が書きたいのクエリは、このようなものです:

SELECT (((SUM(items) * 3) WHERE id="123")) 
     + ((SUM(items) * 2) WHERE items="124"))) 
FROM mytable 

そして私は、単一の番号を取得したいのですが。例えばだから、私のテーブルはこのように見えた場合:

org_id  items 
123  10 
123  3 
124  12 

私は、単一の番号63(すなわち13*3 + 12*2を)取り戻すしたいと思います。

私はCASEステートメントが必要であると確信していますが、実装方法はわかりません。 PostgreSQLの9.4+で

答えて

1

SELECT SUM(items) FILTER (WHERE org_id = 123) * 3 + 
     SUM(items) FILTER (WHERE org_id = 124) * 2 
FROM mytable 

、または、あなたがそのようなペアをたくさん持っている場合は、以前のバージョンでは、

SELECT SUM(items * CASE org_id WHEN 123 THEN 3 WHEN 124 THEN 2 END) 
FROM mytable 

しかし、それは、それらを保存するために理にかなってテーブル(というよりも、ハードコード)とちょうどこれを使用する:

SELECT SUM(items * coeff) 
FROM (
     VALUES 
     (123, 3), 
     (124, 2) 
     ) m (id, coeff) 
JOIN mytable 
USING (id) 

は、ネストされたクエリmウィットを交換してくださいあなたの実際のテーブル