Skip to content

SQLでの利用パターン

パラメータはテンプレート言語ではなく、通常の SQL 値として埋め込まれます。条件分岐や繰り返しは、CASEIN などの SQL 構文で表現します。エスケープの詳細はエスケープと動的参照を参照してください。

TIP

下記の {{ラベル}} は説明用の表記です。画面上ではラベル付きの参照チップとして表示されます。

任意の絞り込み

値が未設定のときはゼロ値が展開されます。ゼロ値のときに絞り込みを外すと、未設定でも全件取得として機能します。

sql
SELECT order_id, product_name, ordered_at
FROM orders
WHERE
  -- 開始日: ゼロ値 ('1970-01-01') の場合は下限で絞り込まない
  CASE WHEN {{start_date}} = '1970-01-01' THEN TRUE ELSE ordered_at >= {{start_date}} END
  -- 終了日: ゼロ値 ('1970-01-01') の場合は上限で絞り込まない
  AND CASE WHEN {{end_date}} = '1970-01-01' THEN TRUE ELSE ordered_at <= {{end_date}} END
  -- 商品名: ゼロ値 ('') の場合は商品名で絞り込まない
  AND CASE WHEN {{product_name}} = '' THEN TRUE ELSE product_name LIKE '%{{product_name}}%' END

次のように書いても同様です。

sql
SELECT * FROM orders
WHERE 1 = 1
  AND (order_date >= {{start_date}} OR {{start_date}} = '1970-01-01')
  AND (status = {{status}} OR {{status}} = '')

値に応じた分岐

パラメータの値で、選択するカラムや計算を切り替えます。

sql
SELECT
  order_id,
  CASE {{region}}
    WHEN 'EU' THEN amount * 1.20
    ELSE amount
  END AS final_price
FROM orders
sql
SELECT
  CASE {{granularity}}
    WHEN 'daily' THEN DATE_TRUNC('day', timestamp)
    WHEN 'weekly' THEN DATE_TRUNC('week', timestamp)
    ELSE DATE_TRUNC('month', timestamp)
  END AS period
FROM events

チェックボックスで参照するテーブル側を切り替える例です。

sql
SELECT * FROM (
  SELECT sensitive_column AS data FROM sensitive_data WHERE {{is_admin}} = TRUE
  UNION ALL
  SELECT public_column AS data FROM filtered_data WHERE {{is_admin}} = FALSE
) t

複数値の選択

テキスト複数入力テキスト複数選択は、カンマ区切りの文字列として展開されます。IN と組み合わせて使います。

sql
SELECT *
FROM sales
WHERE metric_name IN ({{selected_metrics}})

選択されたメトリクスだけを集計する例です。

sql
SELECT
  SUM(CASE WHEN 'revenue' IN ({{selected_metrics}}) THEN revenue ELSE NULL END) AS revenue_total,
  SUM(CASE WHEN 'cost' IN ({{selected_metrics}}) THEN cost ELSE NULL END) AS cost_total,
  SUM(CASE WHEN 'profit' IN ({{selected_metrics}}) THEN profit ELSE NULL END) AS profit_total
FROM sales

動的な識別子

パラメータを引用符内に置くと、テーブル名やカラム名などの識別子を動的に生成できます。書き方と注意点はエスケープと動的参照を参照してください。