見出し画像

【第179回】 Marketing Cloud SQL 中級編(3)- TOP、ORDER BY

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

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

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

そして、Marketing Cloud SQL 中級編では、さらに役立つ内容を紹介しています。この中級編の記事では CASE、DISTINCT、集計関数、GROUP BY を学習し、今回の記事では TOP と ORDER BY を学習したいと思います


■ TOP について

TOP とは、結果として返されるレコードの数を「数字」や「パーセンテージ」で指定することができる便利機能です

その使い方は、簡単で SELECT の直後に TOP ○○ と記載します

■「数字」で指定する場合
SELECT TOP ○○

■「パーセンテージ」で指定する場合
SELECT TOP ○○ PERCENT

※パーセンテージの場合は 小数点以下は切り上げ です
※パーセンテージの場合は Query Studio ではエラーとなってしまいます

前回の記事の最後で紹介した SQL クエリを再掲載します。このクエリを実行することで 10 レコードが取得できます。

SELECT a.Id,
       a.Email,
       a.Name COLLATE Japanese_CS_AS_KS_WS AS [Name],
       a.Prefecture COLLATE Japanese_CS_AS_KS_WS AS [Prefecture],
       b.PurchaseCount,
       b.CustomerRank
FROM MasterSubscribers a
INNER JOIN (
    SELECT UserId,
           COUNT(UserId) AS [PurchaseCount],
           CASE
               WHEN COUNT(UserId) >= 100 THEN '優良顧客'
               ELSE '一般顧客'
           END COLLATE Japanese_CS_AS_KS_WS AS [CustomerRank]
    FROM MasterOrder
    GROUP BY UserId
) b ON a.Id = b.UserId

このクエリに、TOP 3 を設定してみます。

SELECT TOP 3
       a.Id,
       a.Email,
       a.Name COLLATE Japanese_CS_AS_KS_WS AS [Name],
       a.Prefecture COLLATE Japanese_CS_AS_KS_WS AS [Prefecture],
       b.PurchaseCount,
       b.CustomerRank
FROM MasterSubscribers a
INNER JOIN (
    SELECT UserId,
           COUNT(UserId) AS [PurchaseCount],
           CASE
               WHEN COUNT(UserId) >= 100 THEN '優良顧客'
               ELSE '一般顧客'
           END COLLATE Japanese_CS_AS_KS_WS AS [CustomerRank]
    FROM MasterOrder
    GROUP BY UserId
) b ON a.Id = b.UserId

すると、以下の通り 3 レコードのみが取得されました。

但し、ID のところを見ても、購入回数(PurchaseCount)のところを見ても順不同ですよね。ランダムに取得する場合はこれでも良いのですが、何らかの順番でレコードを取得したい場合があるかと思います。

そこで、これを並び替えるのが、次に紹介する ORDER BY です


■ ORDER BY について

ORDER BY とは、結果として返されるレコードの順番を昇順 or 降順 で並び替える機能です

以下のようにクエリを記載します。

ORDER BY Id ASC

ORDER BY PurchaseCount DESC

この項目名の後ろに記載されている ASC が「昇順」(Ascending Order)で、DESC が「降順」(Descending Order)の意味になります

この ASC と DESC の覚え方ですが、単語の頭を見ると「A」と「DE」の違いがあります。「A」はアルファベットの始まりなので、ABC という昇順であると覚え、「DE」は、デメリットなど「否定」の意味があるので、ASC の逆の降順であると覚えましょう

また、デフォルトは ASC「昇順」なので、項目名の後ろに何も記載しなければ「昇順」となります

それでは以下のクエリを実行してみます。

SELECT TOP 3
       a.Id,
       a.Email,
       a.Name COLLATE Japanese_CS_AS_KS_WS AS [Name],
       a.Prefecture COLLATE Japanese_CS_AS_KS_WS AS [Prefecture],
       b.PurchaseCount,
       b.CustomerRank
FROM MasterSubscribers a
INNER JOIN (
    SELECT UserId,
           COUNT(UserId) AS [PurchaseCount],
           CASE
               WHEN COUNT(UserId) >= 100 THEN '優良顧客'
               ELSE '一般顧客'
           END COLLATE Japanese_CS_AS_KS_WS AS [CustomerRank]
    FROM MasterOrder
    GROUP BY UserId
) b ON a.Id = b.UserId
ORDER BY b.PurchaseCount DESC

すると以下の通り、購入回数(PurchaseCount)が多い人から 3 名分のレコードが取得できました。成功です。

このように、TOP と ORDER BY はセットで使用されることが多いです

ちなみに、TOP は上記の例の通り単体で使用できますが、ORDER BY は単体で使用しようとするとエラーが発生します必ず TOP も併用しましょう

例えば、50 万レコードの並び替えを行いたい場合、少し多めの TOP 600000 と設定してあげることで、これを実行できるようになります


■ クエリの記載順と実行順について

それでは最後に、ここまで SELECT、FROM、WHEREJOIN、DISTINCT、GROUP BY、HAVING、ORDER BY などを学習してきました

これまでの記事で、クエリの「記載順」や「実行順」には触れ来ませんでしたので、最後にまとめてみたいと思います。

■ クエリの記載順

① SELECT
② DISTINCT
③ FROM
④ JOIN
⑤ WHERE
⑥ GROUP BY
⑦ HAVING
⑧ ORDER BY

この順番でクエリを記述します。

続いて、クエリが実行される順番についてですが、上との比較で分かりやすいよう、クエリの記載順はそのまま残しておきます

■ クエリの実行順

③ FROM
④ JOIN
⑤ WHERE
⑥ GROUP BY
⑦ HAVING
① SELECT
② DISTINCT

⑧ ORDER BY

さて、ここで何を伝えたかったと言いますと、SELECT が割と遅い段階で処理されていることが分かります

これが何を意味するかと言うと、以前の CASE に関する記事の時にも説明しましたが、例えば、SELECT の CASE では、AS(エイリアス)で命名されますが、GROUP BY 使用時に SELECT で命名した AS(エイリアス)が使用できないというお話でしたなぜなら、それは GROUP BY の処理段階では、まだ SELECT の命名が処理されていないからですね。このことが原因です。

このように、クエリの「記載順」や「実行順」はしっかりと覚えておくようにしてください。


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

今回の記事で Marketing Cloud SQL 中級編 は終了ですここまでで基本的な SQL の機能は、一通り網羅できたかと思います。よって、一旦、連載は終了し、別の機会に Marketing Cloud SQL 上級編を書いてみたいと思います。

今回は以上です。


次の記事はこちら

前回の記事はこちら

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

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