2016-09-22 27 views
0

分数を含む表があります。 私はそれらを追加したいと思いますが、持続時間が45分未満の場合は60分を返します。条件付きSUM分

私のクエリは何も返しませんし、そのようなものです:

SUM(CASE WHEN duration = 45 THEN duration=60 ELSE 0 END) AS t_dur1 , 
SUM(CASE WHEN duration > 45 THEN duration ELSE 0 END) AS t_dur2 

任意の考え?文字通りあなたのロジックを取る

+0

下記の回答以外に、結果が得られない理由が他にもあるかもしれません。あなたの完全なクエリとサンプルデータ/改善された回答のための期待される出力を貼り付けてください – Utsav

答えて

1

、あなただけの単一CASE文を必要とする:

SUM(CASE WHEN duration < 45 THEN 60 ELSE duration END) AS t_dur 

これは、それ以外の場合は、期間の元の値をカウントし、60分として45分より少ない継続時間をカウントします。あなたは、おそらくこのような何かを探してGROUP BYクエリでこれを使用している

SELECT some_col, 
     SUM(CASE WHEN duration < 45 THEN 60 ELSE duration END) AS t_dur 
FROM yourTable 
GROUP BY some_col 
+0

私は1行のソリューションが好きでした! – user1795074

0

あなたのロジックに別の比較演算子を使用する必要があるようです:

SUM(CASE WHEN duration < 45 THEN 60 ELSE 0 END) AS t_dur1 , 
SUM(CASE WHEN duration >= 45 THEN duration ELSE 0 END) AS t_dur2 

あなたのクエリ

CASE WHEN duration = 45 THEN duration = 60 

は常にfalseを返します。実際には0です。

CASEタイプ整数およびブールあなたがまた一つに、それらのCASE文の両方を組み合わせたいことがあり

を適合することができません:

Postgresは、以下のようなものを言って、エラーを引き上げる例えば帽子
SUM(CASE WHEN duration < 45 THEN 60 ELSE duration END) AS t_dur