Skip to content

Add SQL/1211. Queries Quality and Percentage (Claude Sonnet 4.6 Exten…#318

Merged
myoshi2891 merged 6 commits into
mainfrom
dev-from-macmini
Mar 4, 2026
Merged

Add SQL/1211. Queries Quality and Percentage (Claude Sonnet 4.6 Exten…#318
myoshi2891 merged 6 commits into
mainfrom
dev-from-macmini

Conversation

@myoshi2891
Copy link
Copy Markdown
Owner

@myoshi2891 myoshi2891 commented Mar 4, 2026

…ded)

  • Queries_Quality_and_Percentage_pandas.md
  • Queries_Quality_and_Percentage_postgresql.md
  • README.html

以下の2点を Queries_Quality_and_Percentage_postgresql.md に反映しました:

  1. WHERE query_name IS NOT NULL の復元:
    • 推奨解のクエリ(行 201 付近)にて WHERE query_name IS NOT NULL を追加し、意図せぬ NULL グループが発生して WA になるリスクを回避しました。
    • ボトルネックの特定箇所および変更点の差分から WHERE IS NOT NULL を削除したという記述を取り下げました。
    • Mermaid の図解 2 にも WHERE query_name IS NOT NULL を追加してフローを整合させました。
  2. FLOAT キャストとコメントの修正:
    • NUMERIC ではなくネイティブの FLOAT 演算となるよう AVG(rating::float8 / position)::NUMERIC 으로変更しました。
    • 以降の説明や Diff、およびMermaid図の該当箇所での表記も float8(倍精度浮動小数点) 等として、元の "FLOAT 計算で高速化" の主張が正しく活きる形に統一しました。

Mermaid図の不要な矢印 D --> E を D --> F に修正し、コミットしました。

これにより、poor_query_percentage の計算結果(Node D)は不要な ::NUMERIC キャスト(Node E)を通らずに、直接 ROUND(Node F)に向かう正しいフローチャートになりました。

  • ✅ 改善版(推奨・要件緩和時) へのセクション名変更
  • 実行時間のブレと精度のトレードオフに関する警告ブロックの追加
    • 223ms → 221ms のパフォーマンス向上はベンチマークのノイズの可能性がある旨を明記。
    • float8 利用による浮動小数点演算特有の丸め誤差(Precision Loss)のリスクを追記。
    • 基本的には ROUND(..., 2) でカバーされるが、金融系など厳密な精度が求められるケースでは、パフォーマンスを犠牲にしても元の NUMERIC 計算を維持する方針を推奨。
markdown
>**⚠️ 注意: 実行時間のブレと精度のトレードオフ**
> LeetCode 上での`223 ms → 221 ms` の変化は**ベンチマークのブレの範囲内**(ノイズ)である可能性が高いです。
> 中間集計に`float8`(倍精度浮動小数点)を利用すると、ネイティブ CPU 処理により微小なパフォーマンス向上が期待できますが、同時に**浮動小数点演算特有の丸め誤差(Precision Loss)**が発生するリスクがあります。
> 本問のように`ROUND(..., 2)` で小数第2位までに丸める場合は許容範囲内となりますが、金融系やより厳密な精度が求められるケースでは、パフォーマンスを犠牲にしても**元解法の`NUMERIC` のまま計算するアプローチ**が推奨されます。

また、あわせてHTML側(Mermaid図の\n<br>などになった点等)の変更も含まれてコミットされています。

Pandas (Queries_Quality_and_Percentage_pandas.md) の修正:

  1. 重複していた queries_stats の実装コードを整理し、片方を「参考実装(初期方針・非推奨)」セクションに移動し、もう片方を「最終提出版(最適化実装)」として明示しました。付随する見出し番号等も単一の解説フローになるよう修正しています。
  2. float64 の例示について、float64(0.07) ≈ 0.07000000000000000666... と IEEE-754 の近似表現に改め、「近似ではあるが、本問の ROUND_HALF_UP(小数2桁丸め)には十分な精度を持ち実用上安全」という旨の補足を追記しました。

PostgreSQL (Queries_Quality_and_Percentage_postgresql.md) の修正:

  1. 50行目および要点解説における WHERE query_name IS NOT NULL のコメントを、「重複行対策」から「NULL値による独立したNULLグループの生成を防ぐため」という正確な意図へ修正しました。
  2. インデックス利用時の計算量について、断定的な Index Scan → O(N log N) を改め、「実行計画依存: work_mem や n_distinct に基づき HashAggregate (O(N)) または GroupAggregate+Sort (O(N log N)) が選択される」という条件付きの説明に変更しました。

修正を反映し、再度コミット。

Pandas (Queries_Quality_and_Percentage_pandas.md) の修正:

ROUND_HALF_UP の説明: np.floor(x*100+0.5)/100 が SQL の ROUND() と一致するのは本問のような非負データの範囲に限定される点を明記しました。注釈を追加し、負の数(例: ROUND(-1.5))の場合に PostgreSQL と比較して挙動や結果が異なる点にも触れつつ、今回は quality 等が非負のため安全であることを補足しました。
copy=False の説明: コピーを全く行わない(ゼロコピー)と断言していた箇所を、「コピー回避を試みる」というベストエフォートな表現にすべて修正しました。
PostgreSQL (Queries_Quality_and_Percentage_postgresql.md) の修正:

FILTER の説明: SUM(CASE WHEN...) よりも「より高速・簡潔」としていた箇所を、「簡潔で可読性が高い」という表現に修正し、純粋なパフォーマンス上の優位性を断言する内容を取り下げました。
Mermaid図内の集計手法ラベル: Bノードに書かれていた固定の "Hash Aggregate" を、事前に修正したテキストと一致するよう「HashAggregate / GroupAggregate (プランナがコスト等から選択)」に変更しました。

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet