ホームページ >データベース >mysql チュートリアル >PostgreSQL で SQL Server の TOP n WITH TIES をシミュレートするにはどうすればよいですか?

PostgreSQL で SQL Server の TOP n WITH TIES をシミュレートするにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-04 19:01:41965ブラウズ

How to Simulate SQL Server's TOP n WITH TIES in PostgreSQL?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。