見出し画像

【第177回】 Marketing Cloud SQL 中級編(1)- CASE、DISTINCT

これまでに Markeitng Cloud SQL の基本 に始まり、SELECT、FROM、WHERE 、そして、Dataview の使用 や 日付関数、IN(NOT IN)、IS NULL、JOIN、AND、OR の使い方について学習しました。

これらの SQL 超入門の記事を学習することで、以下に示すような ①②③④ の事例に対応できるようになりました。

① データエクステンション内のデータを調査したい
② データビューを使用して、エンゲージ(関与)した顧客を知りたい
③ データビューを活用して、別の配信リストを作りたい
④ 2 つ以上のデータエクステンションを組み合わせて、別のデータエクステンションを作成したい

そして、今回より 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

ちなみに、このような単純作業は ChatGPT で実行するようにしましょう。上の表をコピペして「SQL の CASE で」という指示で簡単に作成できます。 

さて、このクエリ全体を記述すると下記のような形になります。こちらを 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 レコードが重複することなく、取得することができました。成功です。

これが例えば、100 レコード取得された場合は「東京都」という正規の表記に対して「東京」や「とうきょうと」となっているなど、正規の表記でないものが含まれている場合がありますので確認が必要となります。

いかがでしたでしょうか?

その他、私の過去の記事にも DISTINCT を使っている記事がありますので、そちらも参考にしてみてください。


さて、今回は Marketing Cloud SQL 中級編の第一弾として、CASE と DISTINCT の使い方を学習しました。次回は 集計関数 と GROUP BY について学習してみたいと思います

今回は以上です。


次の記事はこちら

前回の記事はこちら

私の note のトップページはこちら

いいなと思ったら応援しよう!