SQL
① ORDER BY なしで PARTITION BY だけ書く罠
出典: SQL Server ROW_NUMBER の落とし穴 — Window Function の内部実装と Sort Operator の判断軸 — 落とし穴 3 つ — ORDER BY なし / PARTITION BY 設計ミス / Sort Operator スピル / ① ORDER BY なしで PARTITION BY だけ書く罠
-- NG: 同点の時に順位がブレる
SELECT customer_id, ROW_NUMBER() OVER (ORDER BY total_sales DESC) AS rn
FROM monthly_sales;
-- OK: customer_id を tiebreaker に
SELECT customer_id, ROW_NUMBER() OVER (ORDER BY total_sales DESC, customer_id) AS rn
FROM monthly_sales;
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「落とし穴 3 つ — ORDER BY なし / PARTITION BY 設計ミス / Sort Operator スピル / ① ORDER BY なしで PARTITION BY だけ書く罠」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
2 件-- 統計情報を見るためのセッション設定 SET STATISTICS IO ON; SET STATISTICS TIME ON;
▶ 実行可
Sort Operator がスピルしてる証拠の読み方 (実行計画 + sys.dm_exec_query_stats)
#ba5a76787842
SELECT TOP 20 qs.execution_count, qs.total_logical_reads / qs.execution_count AS avg_logical_reads, qs.total_elapsed_time / qs.execution_count / 1000 AS avg_elapsed_ms,
▶ 実行可
Sort Operator がスピルしてる証拠の読み方 (実行計画 + sys.dm_exec_query_stats)
#791a21890408
