【第177回】 Marketing Cloud SQL 中級編(1)- CASE、DISTINCT
これまでに Markeitng Cloud SQL の基本 に始まり、SELECT、FROM、WHERE 、そして、Dataview の使用 や 日付関数、IN(NOT IN)、IS NULL、JOIN、AND、OR の使い方について学習しました。
これらの SQL 超入門の記事を学習することで、以下に示すような ①②③④ の事例に対応できるようになりました。
そして、今回より Marketing Cloud SQL 中級編として、さらに役立つ内容を紹介していこうと思います。今回紹介するのは、CASE と DISTINCT です。どちらも重要ですので、この機会に学習しましょう。
■ CASE について
まず、CASE について説明します。
この CASE を使うことで「条件分岐」が可能になります。Excel の IF 関数のようなものであると思えば、イメージしやすいと思います。
そして、この CASE は「CASE WHEN THEN END」の組み合わせで 1 セットとなります。CASE 単体で覚えるのではなく「CASE WHEN THEN END」をセットで覚えるようにしましょう。
このクエリの書き方ですが、まず CASE で開始し、END で終了します。そして、CASE と END の間に、WHEN ○○ = ○○ で条件を書き、THEN ○○ でその結果を書きます。
CASE
WHEN ○○ = ○○ THEN ○○
END
「○○ が ○○ の時に ○○ という結果の値を返す」という感じですね。これが基本形です。
そして、上のような 1 つの条件と結果だけでなく、複数の条件と結果を設定することが可能です。WHEN ○○ = ○○ THEN ○○ を 1 セットとして、複数の条件と結果を設定できます。その場合、上から順に評価がされます。
CASE
WHEN ○○ = ○○ THEN ○○
WHEN ○○ = ○○ THEN ○○
WHEN ○○ = ○○ THEN ○○
END
加えて、ELSE を使用することで、デフォルト値(何も条件に該当しなかった場合の結果)も設定することができます。この ELSE は、END の直前に書いて下さい。この ELSE を書くか書かないかは「任意」となります。
CASE
WHEN ○○ = ○○ THEN ○○
WHEN ○○ = ○○ THEN ○○
WHEN ○○ = ○○ THEN ○○
ELSE ○○
END
また、この CASE を使用したときは、必ず AS(エイリアス)も使用して下さい。AS(エイリアス)は、END の後に書きます。
SELECT
Id,
Email,
CASE
WHEN ○○ = ○○ THEN ○○
WHEN ○○ = ○○ THEN ○○
WHEN ○○ = ○○ THEN ○○
END AS [●●●]
FROM DataExtension
基本的なクエリの書き方を学習しましたので、実際のデータを使った例も書いておきます。
以下のように、Prefecture(県の名前)のデータがある場合に、Region(地方の名前)のデータを、新たに持ちたいというケースで試します。
以下のように、条件指定をして「県名」から「地方名」を取得します。
これを CASE 式だけで表現すると、以下のような形になります。
CASE
WHEN Prefecture IN ('北海道') THEN '北海道地方'
WHEN Prefecture IN ('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県') THEN '東北地方'
WHEN Prefecture IN ('東京都', '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '神奈川県') THEN '関東地方'
WHEN Prefecture IN ('新潟県', '富山県', '石川県', '福井県', '山梨県', '長野県', '岐阜県', '静岡県', '愛知県') THEN '中部地方'
WHEN Prefecture IN ('京都府', '大阪府', '三重県', '滋賀県', '兵庫県', '奈良県', '和歌山県') THEN '近畿地方'
WHEN Prefecture IN ('鳥取県', '島根県', '岡山県', '広島県', '山口県') THEN '中国地方'
WHEN Prefecture IN ('徳島県', '香川県', '愛媛県', '高知県') THEN '四国地方'
WHEN Prefecture IN ('福岡県', '佐賀県', '長崎県', '大分県', '熊本県', '宮崎県', '鹿児島県', '沖縄県') THEN '九州地方'
ELSE 'その他'
END AS Region
さて、このクエリ全体を記述すると下記のような形になります。こちらを Query Studio で実行してみます。
SELECT
Id,
Email,
Prefecture COLLATE Japanese_CS_AS_KS_WS AS [Prefecture],
CASE
WHEN Prefecture IN ('北海道') THEN '北海道地方'
WHEN Prefecture IN ('青森県', '岩手県', '宮城県', '秋田県', '山形県', '福島県') THEN '東北地方'
WHEN Prefecture IN ('東京都', '茨城県', '栃木県', '群馬県', '埼玉県', '千葉県', '神奈川県') THEN '関東地方'
WHEN Prefecture IN ('新潟県', '富山県', '石川県', '福井県', '山梨県', '長野県', '岐阜県', '静岡県', '愛知県') THEN '中部地方'
WHEN Prefecture IN ('京都府', '大阪府', '三重県', '滋賀県', '兵庫県', '奈良県', '和歌山県') THEN '近畿地方'
WHEN Prefecture IN ('鳥取県', '島根県', '岡山県', '広島県', '山口県') THEN '中国地方'
WHEN Prefecture IN ('徳島県', '香川県', '愛媛県', '高知県') THEN '四国地方'
WHEN Prefecture IN ('福岡県', '佐賀県', '長崎県', '大分県', '熊本県', '宮崎県', '鹿児島県', '沖縄県') THEN '九州地方'
ELSE 'その他'
END COLLATE Japanese_CS_AS_KS_WS AS [Region]
FROM MasterSubscribers
すると、下記の通り Region(地方の名前)データを持つことができました。
いかがでしたでしょうか?
上の CASE の例を真似して、色々な条件分岐を試してみて下さい。
その他、私の過去の記事にも CASE を使っている記事がありますので、そちらも参考にしてみてください。
■ DISTINCT について
続いて、DISTINCT について説明します。
なぜこのタイミングで説明するかと言うと、CASE と同様に SELECT で使用するクエリだからですね。
ただし、CASE とは全く内容が異なり、重複レコード(行)を 1 つにまとめるためのクエリになります。Excel にも「重複の削除」という機能があると思いますが、それと同じイメージになります。
さて、この DISTINCT には色々な使い道がありますが、あるデータテーブルの中にどのような値が含まれているかを調べたい場合などに重宝します。
SELECT DISTINCT Prefecture COLLATE Japanese_CS_AS_KS_WS as [Prefecture]
FROM MasterSubscribers
単純に、このようなクエリを記述することで、MasterSubscribers に含まれている Prefecture(県の名前)の一覧を取得することができます。
上の図の通り、47 県分、47 レコードが重複することなく、取得することができました。成功です。
いかがでしたでしょうか?
その他、私の過去の記事にも DISTINCT を使っている記事がありますので、そちらも参考にしてみてください。
さて、今回は Marketing Cloud SQL 中級編の第一弾として、CASE と DISTINCT の使い方を学習しました。次回は 集計関数 と GROUP BY について学習してみたいと思います。
今回は以上です。