postgresqlのIF-THEN-ELSEステートメント


83

私は以下を行うためにpostgresqlクエリを書くことを探しています:

if(field1 > 0,  field2 / field1 , 0)

このクエリを試しましたが、機能しません

if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3

ありがとう


回答:


144

ここのPostgreSQLドキュメントに記載されているように:

SQL CASE式は、他のプログラミング言語のif / elseステートメントと同様に、ジェネリック条件式です。

あなたの質問に具体的に答えるコードスニペット:

SELECT field1, field2,
  CASE
    WHEN field1>0 THEN field2/field1
    ELSE 0
  END 
  AS field3
FROM test

7
好奇心から、if-then-elseステートメントを使用した解決策はありませんでしたか?質問はif-then-elseを求めましたが、答えはswitch-caseステートメントです。
Abel Callejo 2016

こんにちはアベル、質問は特定の問題の解決策を求めました。答えはその特定の問題に対処します。SELECTステートメント内で使用できる条件文(そのうちの1つ)はCASEここに記載されています
ジョセフビクターザミット2016

その場合、答えに、なぜより難しいのか、またはif-thenステートメントを使用してこれを達成できない理由を追加すると、より明確になります。
Maximiliano Becerra 2017

2
@MaximilianoBecerra完了。ご覧ください。あなたの提案をありがとう。
ジョセフビクターザミット2017

AS命令は必要ありません。あなたはこれを行うことができますEND field3
Pablo Vilas


1

一般に、の代替case when ...はですcoalesce(nullif(x,bad_value),y)(OPの場合は使用できません)。例えば、

select coalesce(nullif(y,''),x), coalesce(nullif(x,''),y), *
from (     (select 'abc' as x, '' as y)
 union all (select 'def' as x, 'ghi' as y)
 union all (select '' as x, 'jkl' as y)
 union all (select null as x, 'mno' as y)
 union all (select 'pqr' as x, null as y)
) q

与える:

 coalesce | coalesce |  x  |  y  
----------+----------+-----+-----
 abc      | abc      | abc | 
 ghi      | def      | def | ghi
 jkl      | jkl      |     | jkl
 mno      | mno      |     | mno
 pqr      | pqr      | pqr | 
(5 rows)

時々私はのcase when
ページェントリーを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.