概要:このチュートリアルでは、PostgreSQL CASE条件式を使用して条件付きクエリを作成する方法を学習します。
PostgreSQLCASE
式は、他のプログラミング言語のIF/ELSE
文と同じです。 それはあなたが強力なクエリを形成するためにクエリにif-elseロジックを追加することができます。
CASE
は式なので、式を使用できる任意の場所で使用できます。,SELECT
, WHERE
, GROUP BY
, およびHAVING
句。
CASE
式には、一般形式と単純形式の2つの形式があります。
1)一般的なPostgreSQLのケース式
以下は、CASE
ステートメントの一般的な形式を示しています:
Code language: SQL (Structured Query Language) (sql)
この構文では、各条件(condition_1
, condition_2
…) true
またはfalse
のいずれかを返すブール式です。
条件がfalse
に評価されると、CASE
式は次の条件を上から下に評価し、true
に評価される条件が見つかるまで評価します。
条件がfalse
に評価されると、CASE
式は次の条件を上から下に評価します。
条件がtrue
と評価された場合、CASE
式は条件に続く対応する結果を返します。 たとえば、condition_2
がtrue
と評価された場合、CASE
式はresult_2
を返します。 また、次の式の評価もすぐに停止します。
すべての条件がfalse
と評価される場合、CASE
式はELSE
キーワードに続く結果(else_result
)を返します。 ELSE
句を省略した場合、CASE
式はNULL
を返します。
サンプルデータベースのfilm
テーブルを見てみましょう。
A)一般的なケース例
次のロジックに基づいて、フィルムに長さでラベルを付けたいとします:
- 長さが50分未満の場合、フィルムは短くなります。
- 長さが50分以上120分以下の場合は、フィルムは中程度です。
- 長さが120分を超えると、フィルムは長くなります。
このロジックを適用するには、次のようにSELECT
ステートメントでCASE
式を使用できます:
Code language: PHP (php)
出力:
列エイリアスduration
をCASE
式の後に配置したことに注意してください。
B)集計関数を使用したCASEの使用例
次のロジックで映画に価格セグメントを割り当てるとします:
- レンタル料金が0.99の場合、映画は経済的です。
- レンタル率が1.99の場合、フィルムは質量です。
- レンタル料金が4.99の場合、フィルムはプレミアムです。
そして、あなたは経済、質量、プレミアムに属する映画の数を知りたいです。
この場合、CASE
式を使用して、次のようにクエリを作成できます:
Code language: SQL (Structured Query Language) (sql)
クエリの結果は次のとおりです:
この例では、CASE
式を使用して、レンタル料金が各価格セグメントに該当する場合に1または0を返します。 そして、SUM
関数を適用して、各価格セグメントの映画の合計を計算しました。
2)単純なPostgreSQLのケース式
PostgreSQLは、次のように単純な形式と呼ばれる別の形式のCASE
式を提供します:
Code language: SQL (Structured Query Language) (sql)
最初にCASE
はexpression
を評価し、結果を各値と比較します( value_1
, value_2
, …) 一致するものが見つかるまで、WHEN
句で順番に。
expression
の結果が値(value1、value2など)に等しいと、
)WHEN
句では、CASE
はTHEN
句で対応する結果を返します。
CASE
が一致するものが見つからない場合は、ELSE
の後にあるelse_result
を返し、ELSE
が利用できない場合はNULL
の値を返します。
A)単純なPostgreSQLのケース式の例
次の文は、CASE
式を使用して出力に評価の説明を追加します:
Code language: PHP (php)
この例では、単純なCASE
式を使用して、film
テーブルの評価をG、PG、NC17、PG-13などのリテラル値と比較し、対応する評価の説明を返します。
B)単純なPostgreSQL CASE式を集計関数で使用する例
次のステートメントは、CASE
式をSUM
関数で使用して、各評価のフィルム数を計算します:
Code language: PHP (php)
このチュートリアルでは、PostgreSQLCASE
式を使用して複雑なクエリを作成する方法を学習しました。
- このチュートリアルは役に立ちましたか?