ホームページ >データベース >mysql チュートリアル >PostgreSQL で SQL Server の TOP n WITH TIES をシミュレートするにはどうすればよいですか?
PostgreSQL の TOP n WITH TIES と同等: LIMIT "withtie"
PostgreSQL は、SQL Server の TOP n WITH と直接同等のものを提供しません。 TIES 条項。 PostgreSQL の LIMIT 句は、返す行数を指定するために使用されますが、タイは含まれません。
共通テーブル式 (CTE) を使用した代替アプローチ
PostgreSQL バージョン 12 まででは、代わりのアプローチとして、共通テーブル式 (CTE) とランキング関数を使用して WITH TIES をシミュレートすることが含まれます。動作:
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
ここで、rank() は、ORDER BY 句に基づいて各行にランキングを割り当てます。 WHERE 句の <= 比較により、ランクが n 以下のすべての行 (同順位も含む) が確実に選択されます。
PostgreSQL 12 以前の大きなテーブルの高速な代替手段
大規模なテーブルの場合、CTE メソッドよりも高速な代替アプローチが提供されますここ:
[同等のパフォーマンスを持つ Postgres 11 の FETCH FIRST WITH TIES と同等](https://www.db-fiddle.com/f/h6i8rtyv234ucf653j9k8x46q/0)
PostgreSQL 13 およびBeyond
PostgreSQL 13 以降、WITH TIES 句が正式に追加されました。この句を LIMIT 句と一緒に直接使用すると、目的の動作を実現できます。
SELECT * FROM tablename ORDER BY nums DESC LIMIT 3 WITH TIES;
これは、上位 3 行を取得し、 3 行目に接続する追加の 8 行。
以上がPostgreSQL で SQL Server の TOP n WITH TIES をシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。