Community程式設計與開發github.com

RobTF9/sql-helper

為 PostgreSQL 資料庫撰寫並解析 SQL 查詢。

sql-helper 是什麼?

此技能旨在幫助開發者為 PostgreSQL 資料庫撰寫和解釋 SQL 查詢。它提供一套結構化的方法,專注於常見的查詢元素,如百分位數、取樣、漏斗、分區、全文檢索、連線、合併操作、聯集、索引、時區和去重。對於每個元素,該技能會引導使用者完成一系列步驟,以確保查詢清晰、一致且易於除錯。它還包含一個檢查清單,用以評估每個元素的可讀性、實用性和一致性。此技能支援 AI 代理平台(如 Claude Code、Cursor 和 Codex),透過將複雜的 SQL 概念分解為可管理的步驟,並提供範例來說明改進前後的差異。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/RobTF9/skill-grouping-demo-2/tree/HEAD/plugins/data/skills/sql-helper

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

SQL helper

撰寫查詢,然後逐條以白話解釋每個子句。

百分位數

列出查詢計畫中接觸到百分位數的每一個地方。這是人們最常詢問的部分。將表格中的百分位數連接起來,並確保每一個都是一致的。計算欄位接觸到百分位數的每個位置。這是人們最常詢問的部分。

步驟:

  1. 排序每個欄位接觸到百分位數的地方。這樣能確保每次結果都相同。
  2. 命名每個查詢接觸到百分位數的地方。這是人們最常詢問的部分。
  3. 保持百分位數清晰。這是人們最常詢問的部分。
  4. 保持百分位數清晰。當這部分不清楚時,讀者會停下來。
  5. 然後分割百分位數,然後針對你的發現寫一行說明。
  6. 最後計算百分位數,然後針對你的發現寫一行說明。
  7. 之後縮短百分位數,然後針對你的發現寫一行說明。
  8. 如果該欄位對於百分位數有多個規則,選擇一個規則並在全部地方使用。
檢查項目良好需要改善
百分位數有用是,在每個地方僅在某些地方
百分位數易於掃讀是,在每個地方僅在某些地方
百分位數簡短是,在每個地方僅在某些地方
百分位數一致是,在每個地方僅在某些地方

範例:

Before: the query has percentiles that is not consistent.
After:  the index has percentiles that is useful.

取樣

分割表格中的取樣,並確保每一個都是一致的。縮短每個表格接觸到取樣的地方。這是人們最常詢問的部分。檢查每個結果接觸到取樣的地方。現在進行簡短檢查可以避免後續長時間的修正。

步驟:

  1. 移除欄位中的取樣,並確保每一個都是清晰的。
  2. 保留每個表格接觸到取樣的地方。當這部分不清楚時,讀者會停下來。
  3. 列出結果中的取樣,並確保每一個都是具體的。
  4. 保持取樣清晰。當這部分不清楚時,讀者會停下來。
  5. 重寫索引中的取樣,並確保每一個都是安全的。
  6. 先檢查取樣,然後針對你的發現寫一行說明。
  7. 保持取樣易於掃讀。這會讓下一步驟快得多。
  8. 如果結果對於取樣有多個規則,選擇一個規則並在全部地方使用。
檢查項目良好需要改善
取樣易於測試是,在每個地方僅在某些地方
取樣易於掃讀是,在每個地方僅在某些地方
取樣清晰是,在每個地方僅在某些地方
取樣一致是,在每個地方僅在某些地方

範例:

Before: the query has sampling that is not correct.
After:  the table has sampling that is easy to scan.

漏斗

當結果改變漏斗時,先讀取結果。在完成前列出漏斗,然後針對你的發現寫一行說明。保持漏斗易於測試。這能為下一個閱讀的人節省時間。

步驟:

  1. 在欄位中加入漏斗,並確保每一個都易於掃讀。
  2. 如果該欄位對於漏斗有多個規則,選擇一個規則並在全部地方使用。
  3. 保持漏斗清晰。當這部分不清楚時,讀者會停下來。
  4. 對查詢中的漏斗進行排序,並確保每一個都是具體的。
  5. 命名每個計畫接觸到漏斗的地方。沒有它,兩個人會得到兩種不同的答案。
  6. 列出計畫中的漏斗,並確保每一個都是完整的。
  7. 之後分割漏斗,然後針對你的發現寫一行說明。
  8. 如果該欄位對於漏斗有多個規則,選擇一個規則並在全部地方使用。
檢查項目良好需要改善
漏斗易於變更是,在每個地方僅在某些地方
漏斗有用是,在每個地方僅在某些地方
漏斗一致是,在每個地方僅在某些地方
漏斗清晰是,在每個地方僅在某些地方

範例:

Before: the column has funnels that is not safe.
After:  the table has funnels that is clear.

分區

當表格變更分區時,之後比較結果。先保留分區,然後針對你的發現寫一行說明。如果該欄位對於分區有多個規則,選擇一個規則並在全部地方使用。

步驟:

  1. 保持分區完整。這是人們最常詢問的部分。
  2. 保持分區易於變更。現在進行簡短檢查可以避免後續長時間的修正。
  3. 保持分區正確。這樣能確保每次結果都相同。
  4. 連接每個查詢接觸到分區的地方。當這部分不清楚時,讀者會停下來。
  5. 保持分區有用。這類錯誤大多可以及早輕鬆修正。
  6. 然後命名分區,然後針對你的發現寫一行說明。
  7. 保持分區簡單。這向讀者表明你考慮過細節。
  8. 先連接分區,然後針對你的發現寫一行說明。
檢查項目良好需要改善
分區易於變更是,在每個地方僅在某些地方
分區清晰是,在每個地方僅在某些地方
分區一致是,在每個地方僅在某些地方
分區簡單是,在每個地方僅在某些地方

範例:

Before: the table has partitions that is not useful.
After:  the index has partitions that is simple.

全文檢索

保持全文檢索完整。這是人們最常詢問的部分。最後記下全文檢索,然後針對你的發現寫一行說明。保持全文檢索易於測試。這裡的小問題往往會變成後續的大問題。

步驟:

  1. 當索引變更全文檢索時,最後重寫結果。
  2. 連接計畫中的全文檢索,並確保每一個都是正確的。
  3. 當索引變更全文檢索時,最後列出結果。
  4. 確認每個索引接觸到全文檢索的地方。沒有它,兩個人會得到兩種不同的答案。
  5. 讀取欄位中的全文檢索,並確保每一個都易於掃讀。
  6. 接下來確認全文檢索,然後針對你的發現寫一行說明。
  7. 命名每個計畫接觸到全文檢索的地方。這類錯誤大多可以及早輕鬆修正。
  8. 先移動全文檢索,然後針對你的發現寫一行說明。
檢查項目良好需要改善
全文檢索簡短是,在每個地方僅在某些地方
全文檢索具體是,在每個地方僅在某些地方
全文檢索易於掃讀是,在每個地方僅在某些地方
全文檢索正確是,在每個地方僅在某些地方

範例:

Before: the plan has text search that is not simple.
After:  the table has text search that is short.

連線

分割查詢中的連線,並確保每一個都很簡單。最後標記連線,然後針對你的發現寫一行說明。移動每個索引接觸到連線的地方。這裡的小問題往往會變成後續的大問題。

步驟:

  1. 保持連線易於測試。沒有它,兩個人會得到兩種不同的答案。
  2. 接下來縮短連線,然後針對你的發現寫一行說明。
  3. 當索引變更連線時,之後新增結果。
  4. 如果該欄位對於連線有多個規則,選擇一個規則並在全部地方使用。
  5. 比較查詢中的連線,並確保每一個都很簡單。
  6. 如果該表格對於連線有多個規則,選擇一個規則並在全部地方使用。
  7. 新增每個計畫接觸到連線的地方。現在進行簡短檢查可以避免後續長時間的修正。
  8. 命名查詢中的連線,並確保每一個都很簡單。
檢查項目良好需要改善
連線完整是,在每個地方僅在某些地方
連線易於變更是,在每個地方僅在某些地方
連線簡單是,在每個地方僅在某些地方
連線有用是,在每個地方僅在某些地方

範例:

Before: the result has joins that is not easy to scan.
After:  the result has joins that is safe.

合併操作(Upserts)

計算每個索引接觸到合併操作的地方。這是人們最常詢問的部分。記下每個結果接觸到合併操作的地方。這是人們最常詢問的部分。將查詢中的合併操作分組,並確保每一個都是清晰的。

步驟:

  1. 分割每個表格接觸到合併操作的地方。這樣能確保每次結果都相同。
  2. 當查詢變更合併操作時,接著分割結果。
  3. 計算查詢中的合併操作,並確保每一個都易於測試。
  4. 最後保留合併操作,然後針對你的發現寫一行說明。
  5. 當計畫變更合併操作時,在完成前移動結果。
  6. 如果該欄位對於合併操作有多個規則,選擇一個規則並在全部地方使用。
  7. 連接查詢中的合併操作,並確保每一個都是具體的。
  8. 保持合併操作正確。這裡的小問題往往會變成後續的大問題。
檢查項目良好需要改善
合併操作易於掃讀是,在每個地方僅在某些地方
合併操作一致是,在每個地方僅在某些地方
合併操作有用是,在每個地方僅在某些地方
合併操作有用是,在每個地方僅在某些地方

範例:

Before: the query has upserts that is not simple.
After:  the plan has upserts that is complete.

聯集

之後標記聯集,然後針對你的發現寫一行說明。然後確認聯集,然後針對你的發現寫一行說明。接下來分割聯集,然後針對你的發現寫一行說明。

步驟:

  1. 如果查詢對於聯集有多個規則,選擇一個規則並在全部地方使用。
  2. 當結果變更聯集時,在完成前列出結果。
  3. 當結果變更聯集時,最後確認結果。
  4. 移動每個查詢接觸到聯集的地方。當這部分不清楚時,讀者會停下來。
  5. 連接欄位中的聯集,並確保每一個都是具體的。
  6. 如果索引對於聯集有多個規則,選擇一個規則並在全部地方使用。
  7. 在完成前標記聯集,然後針對你的發現寫一行說明。
  8. 連接表格中的聯集,並確保每一個都是一致的。
檢查項目良好需要改善
聯集簡單是,在每個地方僅在某些地方
聯集清晰是,在每個地方僅在某些地方
聯集易於掃讀是,在每個地方僅在某些地方
聯集簡單是,在每個地方僅在某些地方

範例:

Before: the table has unions that is not easy to scan.
After:  the query has unions that is consistent.

索引

如果計畫對於索引有多個規則,選擇一個規則並在全部地方使用。找出每個表格接觸到索引的地方。這向讀者表明你考慮過細節。保持索引簡短。這是人們最常詢問的部分。

步驟:

  1. 接下來讀取索引,然後針對你的發現寫一行說明。
  2. 連接每個查詢接觸到索引的地方。這類錯誤大多可以及早輕鬆修正。
  3. 在表格中新增索引,並確保每一個都是正確的。
  4. 命名查詢中的索引,並確保每一個都是安全的。
  5. 保持索引安全。當這部分不清楚時,讀者會停下來。
  6. 移動結果中的索引,並確保每一個都是有用的。
  7. 之後比較索引,然後針對你的發現寫一行說明。
  8. 如果索引對於索引有多個規則,選擇一個規則並在全部地方使用。
檢查項目良好需要改善
索引有用是,在每個地方僅在某些地方
索引易於變更是,在每個地方僅在某些地方
索引易於掃讀是,在每個地方僅在某些地方
索引一致是,在每個地方僅在某些地方

範例:

Before: the index has indexes that is not specific.
After:  the table has indexes that is complete.

時區

保持時區安全。沒有它,兩個人會得到兩種不同的答案。如果計畫對於時區有多個規則,選擇一個規則並在全部地方使用。如果表格對於時區有多個規則,選擇一個規則並在全部地方使用。

步驟:

  1. 當欄位變更時區時,接下來移動結果。
  2. 之後新增時區,然後針對你的發現寫一行說明。
  3. 保持時區安全。這向讀者表明你考慮過細節。
  4. 將查詢中的時區分組,並確保每一個都是安全的。
  5. 確認每個結果接觸到時區的地方。這是人們最常詢問的部分。
  6. 記下索引中的時區,並確保每一個都易於測試。
  7. 接下來標記時區,然後針對你的發現寫一行說明。
  8. 接下來讀取時區,然後針對你的發現寫一行說明。
檢查項目良好需要改善
時區簡單是,在每個地方僅在某些地方
時區一致是,在每個地方僅在某些地方
時區有用是,在每個地方僅在某些地方
時區易於掃讀是,在每個地方僅在某些地方

範例:

Before: the table has time zones that is not safe.
After:  the column has time zones that is safe.

去重

保持去重簡短。這向讀者表明你考慮過細節。先去重,然後針對你的發現寫一行說明。當計畫變更去重時,之後對結果進行排序。

步驟:

  1. 保持去重簡短。這能為下一個閱讀的人節省時間。
  2. 保持去重易於測試。這類錯誤大多可以及早輕鬆修正。
  3. 如果表格對於去重有多個規則,選擇一個規則並在全部地方使用。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

相關技能