第7章. CASE文
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
SQLの真の定義であるJOIN 演算子を学ぶ準備はほぼ整った。しかしその前に、の章では、CASE と呼ばれる非常に便利な演算子について説明する。この演算子を使うと、1つ以上の条件付きで列の値を別の値と入れ替えることができる。
CASEステートメント
CASE ステートメントでは、1つ以上の条件と各条件に対応する値をマッピングすることができる。CASE 文はCASE という言葉で始め、END で締めくくる。これらのキーワードの間に、各条件を指定する。 WHEN [condition] THEN [value]で各条件を指定する。 [condition]と対応する [value]は自分で指定する。条件と値のペアを指定した後、どの条件も満たされなかった場合にデフォルトとなるキャッチオール値を指定することができ、これはELSE で指定される。 例えば、wind_speed をwind_severity のカテゴリーに分類することができる(図7-1)。ここで、40を超える速度は'HIGH' 、30から40は'MODERATE' 、それ以下は'LOW' となる:
SELECTreport_code,year,month,day,wind_speed,CASEWHENwind_speed>=40THEN'HIGH'WHENwind_speed>=30ANDwind_speed<40THEN'MODERATE'ELSE'LOW'ENDaswind_severityFROMstation_data
図7-1. 風の強さをHIGH、MODERATE、LOWに分類する。
実際には、AND wind_speed < 40 の条件付きは省略できる。マシンはCASE 文を上から下へと読み取り、最初に真と発見された条件付きが使用される(そして、それ以降の条件評価は停止される)。したがって、wind_speed が 43 のレコードがあれば、'HIGH' として評価されることは確実である。30より大きいが、'MODERATE' は代入されない。これを知ることで、少し効率的なクエリを作成することができる:
SELECTreport_code,year,month,day,wind_speed,CASEWHENwind_speed>=40THEN'HIGH'WHENwind_speed>=30THEN'MODERATE'ELSE'LOW'ENDaswind_severityFROMstation_data
CASE文をグループ化する
CASE ステートメントを作成し、それらをグループ化すると、非常に強力な変換を行うことができる。集計する前に1つ以上の条件付きで値を変換することで、興味深い方法でデータをスライスする可能性がさらに広がる。先ほどの例をさらに詳しく説明すると、year とwind_severity をグループ化し、それぞれのレコードのカウントを取得することができる。(また、GROUP BY を序数で使用し、 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access