SQLのWITH TIESオプションは、ORDER BYと行数制限構文(TOPまたはFETCH FIRST ... ROWS ONLY)と共に使用されます。これは、N行だけでなく、N行目にあるソートフィールドの値と一致するすべての行を返すことを可能にします。
必要な場面: 分析、ランキング、リーダーボードでは、「同点」や同じ評価を持つグループを含めることが重要です。
例(SQL Server):
SELECT TOP 3 WITH TIES * FROM Sales ORDER BY Amount DESC;
3位と4位が同じ売上金額の場合、両方の行が返されます。
PostgreSQLの場合:
SELECT * FROM Sales ORDER BY Amount DESC FETCH FIRST 3 ROWS WITH TIES;
重要: ORDER BYと共にしか機能しないため、他の方法では結果が予測できません。
TOP N/LIMITとWITH TIESの違いは何ですか?
よくある誤解: 「WITH TIESは単に行を制限し、同義である」。
正しい回答:
TOP N/LIMITは、次の値が同じであっても正確にN行を返します。WITH TIESは、N行目とソートフィールドの値が一致するすべての行を追加します。例:
-- 最高の2つの結果を選択しますが、「同点」があればそれも含めます: SELECT TOP 2 WITH TIES Name, Score FROM Results ORDER BY Score DESC;
ストーリー
プロジェクト: 学生ランキングコンペティション。 誤り: 単にLIMIT 3を使用し、同じスコアの学生が敗者のリストに載ってしまい、実際の入賞者が誤って "カット" されました。
ストーリー
プロジェクト: Eコマース分析。 誤り: 最も人気のある5つの商品を表示したいが、売上で同じSKUを持つものについては最初の5つだけを表示し、その後の監査で一部のヒット商品が報告に含まれなかったことに気づきました。
ストーリー
プロジェクト: 支店の売上報告。 誤り: クライアントは同じ結果のすべてのリーダーを見たいと考えていましたが、開発者はWITH TIESを知らず、結果が不正確で、顧客はデータの質に対して苦情を申し立てました。