【ADP】WEB問題集:データ分析編

WEB問題集

ADP#1(data-analysis)

売上テーブル sales(order_id, customer_id, amount, ordered_at) から、顧客ごとに最新の注文 1 件を取得したいと考えています。BigQuery で最も簡潔に書けるクエリはどれですか。

ディスカッション 0

正解:D

正解の根拠

QUALIFY 句はウィンドウ関数の結果に対して直接フィルタを適用できる BigQuery の構文で、サブクエリを使わずに「グループごとの最新 1 件」を取得できます。

役割
PARTITION BY customer_id顧客単位で番号付け
ORDER BY ordered_at DESC新しい順
QUALIFY = 1各グループの先頭のみ抽出

不正解の理由

  • B: GROUP BY だけでは行全体を取得できません。
  • C: 全体で 1 件しか返りません。
  • A: スカラー サブクエリが複数行を返しエラーになります。

参考:QUALIFY 句

ADP#2(data-analysis)

BigQuery で日次売上テーブルから前日比 (今日 - 前日) を求めたいです。最も適切な関数はどれですか。

ディスカッション 0

正解:D

正解の根拠

LAG は同じパーティション内で 1 つ前の行の値を返すウィンドウ関数で、前日比の計算に最適です。amount - LAG(amount) OVER (ORDER BY day) のように記述します。

関数動き
LAG前の行を参照
LEAD後の行を参照
RANK順位付け
FIRST_VALUEパーティション先頭値

不正解の理由

  • B: 翌日の値を参照するため前日比には不適です。
  • C: 順位を返すだけです。
  • A: 期間先頭の値を返します。

参考:ナビゲーション関数

ADP#3(data-analysis)

クエリ内で複数の中間結果を読みやすく組み立てたいです。BigQuery で再利用可能な名前付き一時結果セットを定義する標準 SQL の構文はどれですか。

ディスカッション 0

正解:B

正解の根拠

WITH 句 (Common Table Expression, CTE) はクエリ内で名前付きの一時結果を定義でき、SELECT 文から複数回参照できます。可読性とメンテナンス性が高い手法です。

方法用途
WITH (CTE)同一クエリ内の中間結果
TEMP TABLEセッション内で複数クエリ共有
ビュー永続的な再利用

不正解の理由

  • A: 毎回作成はオーバーヘッドが大きいです。
  • C: ビューは永続オブジェクトで一時用途に過剰です。
  • D: BigQuery にはセッション変数の概念がそうした用途で標準化されていません。

参考:WITH 句

ADP#4(data-analysis)

JSON 文字列カラム payload から特定のスカラー値 (例: ユーザー名) を取り出したいです。BigQuery で文字列として安全に取得するのに最も適した関数はどれですか。

ディスカッション 0

正解:A

正解の根拠

JSON_VALUE はスカラー値を STRING として返す関数で、ユーザー名などの単一値の抽出に最適です。引用符が外された素のテキストを得られます。

関数戻り値
JSON_VALUEスカラー (STRING)
JSON_QUERYJSON 部分木 (STRING)
PARSE_JSONJSON 型

不正解の理由

  • B: JSON_QUERY はオブジェクトや配列の取得用です。
  • C: JSON 全体を文字列化するだけです。
  • D: 解析するだけでパスは指定できません。

参考:JSON 関数

ADP#5(data-analysis)

JSON カラムからオブジェクト全体を JSON 形式のまま取り出す関数として最も適切なのはどれですか。

ディスカッション 0

正解:D

正解の根拠

JSON_QUERY はオブジェクトや配列など JSON 構造を JSON 表現の文字列として返します。ネストされた構造を維持したい場合に使用します。

関数典型用途
JSON_QUERYオブジェクト/配列抽出
JSON_VALUEスカラー抽出
JSON_TYPE型判定

不正解の理由

  • B: スカラーしか返せません。
  • C: 型を返すだけです。
  • A: キャストでは構造抽出はできません。

参考:JSON_QUERY