顧客行動分析
配点 : 40点難易度 : 4
制限実行時間 : 1000ms制限メモリ使用量 : 128 MB
SQLiteの注意点

TOPSIC SQLでは、SQLの実行環境にSQLiteを使用しています。SQLite以外のRDBMSの文法を使用することはできません。
問題を解く際に注意すべきSQLiteの制約について、以下に記載してありますのでご確認下さい。

  1. NUMERIC、INTEGER、REALは、自身のクラスへの変換が推奨されていますが、変換できなかった場合でも、そのまま格納されます。
  2. 新しくデータを追加した場合、既に格納されているデータの中で ROWID の値が最大のものを探し、それに1を加えた値が新しく追加されるデータの ROWID の値として保存されます。
  3. 外部結合は、左外部結合を行う LEFT OUTER JOIN 句のみ使用できます。
    ※2022年12月以降、LEFT / RIGHT / FULL OUTER JOIN が使用可能となりました。
  4. 指定した日付と時刻のタイムゾーンはUTCとして扱われます。
  5. 日付関数や文字列関数については、SQLiteで固有の関数があります。
  6. テーブル項目の論理名が「◯◯日」となっている場合は、日付項目の時分秒は設定されていません。論理名が「◯◯日時」となっている場合は、日付項目の時分秒まで設定されています。
    • 「受注日」の場合は「2021-01-01」
    • 「受注日時」の場合は「2021-01-01 15:15:15」

その他のSQLiteの制約については、SQLiteの公式ドキュメントをご確認ください。
また、ER図の読み方やSQLiteの関数および構文などについては、「受験ルール・用語」をご確認ください。

問題

あるECサイトの顧客が、購入にいたるまでの購入プロセスを収集したプロセスログテーブル(PROCESS_LOG)がある。

プロセスは以下の5STEPに分類されている。

  • STEP1 = サイトを表示
  • STEP2 = 商品ページを閲覧
  • STEP3 = 商品をカートに追加
  • STEP4 = 支払情報の入力
  • STEP5 = 購入完了

このサイトの離脱ポイントを特定したいので、このプロセスログテーブルから各プロセスID(PROCESS_ID)を実行したセッション数を集計しなさい。
セッション数に関しては、セッションID(SESSION_ID)をカウントすること。

[データ制約について]

  • 1つのセッションIDで、同一のプロセスIDは複数存在していないものとする
  • 異なるプロセスIDで、実行日時が同じデータは存在しないものとする

[集計対象となる条件]

  • STEP1~5が、実行日時(EX_TIMESTAMP)が早い順に実行されているSTEPまでが対象
  • STEP1よりも先に他のSTEPが実行されていないこと
  • STEP1以外のSTEPは、1つ前のSTEPが実行されていること

下記の例の場合、STEP1 → STEP2 → STEP3 → STEP4 → STEP5 の順番に実行されたのはSTEP1とSTEP2までなので、
この2つのレコードだけを集計対象とする。

【例】

SESSION_ID PROCESS_ID USER_ID EX_TIMESTAMP
aaa STEP1 110 2022-04-12 00:00:00
aaa STEP2 110 2022-04-12 00:01:00
aaa STEP4 110 2022-04-12 00:02:00
aaa STEP3 110 2022-04-12 00:03:00
aaa STEP5 110 2022-04-12 00:04:00

表示項目は以下とする。(エイリアスを使用し→の項目名とする)

  • PROCESS_ID → PROCESS
  • 集計した件数 → CNT

表示順

  1. PROCESS_IDの昇順

表示フォーマット

※あくまでフォーマットを示すもので、正解例ではありません。行数も正解とは異なります。

PROCESS CNT
STEP1 13
STEP2 8
STEP3 4
STEP4 3
STEP5 2

ER図 (半角:物理名、全角:論理名)


テーブル定義

テーブル名: PROCESS_LOG

主キー 列名 データ型 必須 デフォルト値
✔︎ SESSION_ID VARCHAR ✔︎ NULL
✔︎ PROCESS_ID VARCHAR ✔︎ NULL
USER_ID VARCHAR ✔︎ NULL
EX_TIMESTAMP VARCHAR ✔︎ NULL

サンプルデータ

テーブル名: PROCESS_LOG

SESSION_ID PROCESS_ID USER_ID EX_TIMESTAMP
a01 STEP1 100 2023-11-01 00:01:00
a01 STEP2 100 2023-11-01 00:02:00
a01 STEP3 100 2023-11-01 00:03:00
a01 STEP4 100 2023-11-01 00:04:00
a01 STEP5 100 2023-11-01 00:05:00
a02 STEP1 200 2023-11-01 00:01:00
a02 STEP2 200 2023-11-01 00:02:00
a02 STEP3 200 2023-11-01 00:03:00
a02 STEP4 200 2023-11-01 00:04:00
a03 STEP1 300 2023-11-01 00:01:00
a03 STEP2 300 2023-11-01 00:02:00
a03 STEP3 300 2023-11-01 00:03:00
a04 STEP1 400 2023-11-01 00:01:00
a04 STEP2 400 2023-11-01 00:02:00
a05 STEP1 500 2023-11-01 00:01:00
a06 STEP1 600 2023-11-01 00:01:00
a06 STEP2 600 2023-11-01 00:03:00
a06 STEP3 600 2023-11-01 00:02:00
a06 STEP4 600 2023-11-01 00:04:00
a06 STEP5 600 2023-11-01 00:05:00
a07 STEP1 700 2023-11-01 00:01:00
a07 STEP2 700 2023-11-01 00:02:00
a07 STEP3 700 2023-11-01 00:04:00
a07 STEP4 700 2023-11-01 00:03:00
a07 STEP5 700 2023-11-01 00:05:00
a08 STEP4 800 2023-11-01 00:01:00
a08 STEP5 800 2023-11-01 00:02:00
a09 STEP3 900 2023-11-01 00:01:00
a09 STEP4 900 2023-11-01 00:02:00
a09 STEP5 900 2023-11-01 00:03:00
a10 STEP2 110 2023-11-01 00:01:00
a10 STEP3 110 2023-11-01 00:02:00
a10 STEP4 110 2023-11-01 00:03:00
a10 STEP5 110 2023-11-01 00:04:00
a11 STEP1 111 2023-11-01 00:01:00
a11 STEP2 111 2023-11-01 00:02:00
a11 STEP3 111 2023-11-01 00:04:00
a11 STEP4 111 2023-11-01 00:03:00
a11 STEP5 111 2023-11-01 00:05:00
a12 STEP1 112 2023-11-01 00:01:00
a12 STEP2 112 2023-11-01 00:04:00
a12 STEP3 112 2023-11-01 00:02:00
a12 STEP4 112 2023-11-01 00:03:00
a12 STEP5 112 2023-11-01 00:05:00
a13 STEP1 113 2023-11-01 00:01:00
a13 STEP2 113 2023-11-01 00:03:00
a13 STEP3 113 2023-11-01 00:04:00
a13 STEP4 113 2023-11-01 00:02:00
a13 STEP5 113 2023-11-01 00:05:00
a14 STEP1 114 2023-11-01 00:01:00
a14 STEP2 114 2023-11-01 00:05:00
a14 STEP3 114 2023-11-01 00:02:00
a14 STEP4 114 2023-11-01 00:03:00
a14 STEP5 114 2023-11-01 00:04:00
a15 STEP2 115 2023-11-01 00:01:00
a15 STEP3 115 2023-11-01 00:02:00
a15 STEP4 115 2023-11-01 00:03:00
a15 STEP5 115 2023-11-01 00:04:00
a16 STEP1 116 2023-11-01 00:01:00
a16 STEP2 116 2023-11-01 00:02:00
a16 STEP3 116 2023-11-01 00:05:00
a16 STEP4 116 2023-11-01 00:03:00
a16 STEP5 116 2023-11-01 00:04:00
a17 STEP2 100 2023-11-01 01:01:00
a18 STEP3 100 2023-11-01 02:01:00
a19 STEP4 100 2023-11-01 03:01:00
b01 STEP1 100 2023-11-01 04:01:00
b01 STEP2 100 2023-11-01 04:02:00
b01 STEP3 100 2023-11-01 04:03:00
b01 STEP4 100 2023-11-01 04:04:00
b01 STEP5 100 2023-11-01 04:05:00

Sorry, Japanese Only.