2016-12-02 6 views
0

グループおよびサブグループの合計は:SQL:私は次の形式でデータをお持ちの

Date All_impressions  Id2_Impressions 
1-Jan  135     45 
2-Jan  375     135 

私がやってみました:

SELECT DATE, 
    SUM(Impressions) AS All_impressions 
    , CASE WHEN id=2 SUM(impressions) ELSE 0 
     END as Id2_Impressions 
GROUP BY DATE,id 

Date id impressions 
1-Jan 1 10 
1-Jan 2 20 
1-Jan 3 30 
1-Jan 1 15 
1-Jan 2 25 
1-Jan 3 35 
2-Jan 1 50 
2-Jan 2 60 
2-Jan 3 70 
2-Jan 1 55 
2-Jan 2 65 
2-Jan 3 75 

私は、結果として望みます

これは私がそれを望んでいた方法を表示しませんでした。 どうすればいいですか?

答えて

0

あなたは近くです。条件付きの集約のための正しい構文は次のとおりです。

ある
SELECT DATE, 
     SUM(Impressions) AS All_impressions, 
     SUM(CASE WHEN id = 2 THEN impressions ELSE 0 END) as Id2_Impressions 
FROM ?? 
GROUP BY DATE 
ORDER BY DATE; 

は、CASE式はSUM()関数の引数です。 FROM句も必要です。私はそれが単なる見落としであったと思う。

もっと最近のバージョンのPostgresはFILTER節をサポートしていることに注意してください。これは、SUM(CASE)よりも少し効率的ですが、これは起動したパスではありません。

+0

こんにちはゴードン、返事をありがとう。私はどのようにデータを誤って表現したのかを理解しました。今すぐソースデータを見てください。 @ Cerberus。 – Cerberus

+0

@ Cerberus。 。 。この回答のクエリは、あなたが望むことをするように見えます。 –

関連する問題