ワンクリックで
sql-format
SQLフォーマットルール。TRIGGER:「SQL書いて」「クエリ書いて」「クエリサンプル」等のSQL関連の依頼時、またはSQLを含む回答を生成するとき。SQLコードを表示する前に必ず適用すること。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
SQLフォーマットルール。TRIGGER:「SQL書いて」「クエリ書いて」「クエリサンプル」等のSQL関連の依頼時、またはSQLを含む回答を生成するとき。SQLコードを表示する前に必ず適用すること。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
LuaLaTeX + Python matplotlib で技術書・社内教科書を作成・編集する
優しい偉人キャラクターとして思考を深め、プロジェクト管理をサポートする
hanzo・HANZO・foodiesプロダクトの仕様・実装・DBテーブルに関する質問に回答する。蓄積済み知見→ドキュメント→ソースコード→DBの優先順位で参照し、素早く正確に回答して知見を蓄積する。「hanzoの〇〇の仕様は?」「このテーブルの役割は?」「〇〇の実装はどうなってる?」のような質問時に使う
/miru で起動。直前のClaudeの回答が理解できない時に、段階を踏んで理解度を確認しながら理解へ導く
staging/hotfix/production環境のPostgreSQLにSSHトンネル経由で読み取り専用クエリを実行する
Redash APIを使ってクエリ情報・結果を取得・分析する。ユーザーがRedashのURLを貼った場合、「Redashを確認して」「このクエリを見て」などRedashへのアクセスが必要な場面で自動的に使用する。
| name | sql-format |
| description | SQLフォーマットルール。TRIGGER:「SQL書いて」「クエリ書いて」「クエリサンプル」等のSQL関連の依頼時、またはSQLを含む回答を生成するとき。SQLコードを表示する前に必ず適用すること。 |
| user-invocable | false |
SQLを書くとき・例示するときは以下のフォーマットに従う。
作成したSQLクエリは以下のルールで保存する:
~/sandpit/YYYYMMDD/ ディレクトリ(当日の日付)mkdir -p で作成yoy_sales_query.sql, monthly_summary.sql).sql 拡張子, column_name の形式join は使わない - 内部結合は必ず inner join と明示するwith config as (
select
hoge1
, hoge2
)
, tbl as (
select *
from aaa
)
with xxx as (, xxx as ( (行頭カンマ)select
column1
, column2
, column3
, columnjoin ではなく inner join と書く-- 単一条件: 同じ行に書く
inner join bbb b on a.id = b.id
left join ccc c on a.id = c.id
-- 複数条件: 改行してインデント
inner join ddd d
on a.id = d.id
and a.key = d.key
where 1=1
and a.status = 'active'
and a.date >= '2024-01-01'
where 1=1 を使用and で始めるクエリの正しさをCTEで検証する。テストは test CTEにまとめ、末尾で cross join test して実行する。
PostgreSQLには error() 関数がないため、以下で代用する:
cast(date(cast('ここにエラーメッセージ' as text)) as text)
文字列をdateにキャストしようとして失敗することでエラーを発生させる。
テストは以下の4種類に分類できる:
| 単一テーブル | テーブル間 | |
|---|---|---|
| 行レベル | NULLチェック、負値チェック | 計算値の一致確認 |
| 集計レベル | 合計値の検証 | レコード数の保全確認 |
, test as (
select
-- 行レベル: NULLが存在しないか
case
when exists(select 1 from tbl where column1 is null)
then cast(date(cast('column1にNULLが存在します' as text)) as text)
else 'passed'
end as test_no_null
-- 集計レベル: 件数が元テーブルと一致するか
, case
when (select count(*) from tbl) != (select count(*) from raw)
then cast(date(cast('件数が元テーブルと一致しません' as text)) as text)
else 'passed'
end as test_count_match
-- 集計レベル: セグメント合計が全体と一致するか
, case
when (select sum(amount) from segment_tbl) != (select sum(amount) from tbl)
then cast(date(cast('セグメント合計が全体合計と一致しません' as text)) as text)
else 'passed'
end as test_segment_sum
)
select *
from tbl t
cross join test
test CTEは最後のCTEとして追加するcross join test を最終クエリの末尾に付けるwith config as (
select
hoge1
, hoge2
)
, tbl as (
select *
from aaa a
left join bbb b on a.abc = b.abc
left join ccc c
on a.abc = c.abc
and a.def = c.def
where 1=1
and a.xxx = 'xxx'
)
, test as (
select
case
when exists(select 1 from tbl where hoge1 is null)
then cast(date(cast('hoge1にNULLが存在します' as text)) as text)
else 'passed'
end as test_no_null
)
select *
from tbl t
cross join test
order by t.date