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

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

Mary-Kate Olsen
リリース: 2025-01-04 00:34:38
オリジナル
382 人が閲覧しました

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

SQL Server の TOP n WITH TIES に相当する PostgreSQL

SQL Server では、TOP n WITH TIES 句を使用して上位 n 行を取得できます。結果セット内の同点を含む、テーブルからの結果。 PostgreSQL には、この機能と直接同等のものはありません。ただし、同様の結果を達成する別の方法もあります。

代替方法:

オプション 1: CTE とランクを使用する

PostgreSQL バージョン 12 まででは、rank() 関数で共通テーブル式 (CTE) を使用して、 WITH TIES:

WITH cte AS (
   SELECT *, rank() OVER (ORDER BY <something>) AS rnk
   FROM   tbl
   )
SELECT *
FROM   cte
WHERE  rnk <= n;
ログイン後にコピー

たとえば、{10, 9, 8, 8, 2} を含む Numbers テーブルの場合、次のクエリは {10, 9, 8, 8} を返します。 :

WITH cte AS (
   SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk
   FROM   Numbers
   )
SELECT nums
FROM   cte
WHERE  rnk <= 3;
ログイン後にコピー

PostgreSQL 12 および旧:

大規模なテーブルの場合、次の代替メソッドによりパフォーマンスが向上します:

  • 同等のパフォーマンスを持つ Postgres 11 の FETCH FIRST WITH TIES と同等

PostgreSQL 13 および上:

PostgreSQL 13 では WITH TIES 句が導入され、この機能のネイティブ実装が提供されています。

SELECT nums FROM Numbers ORDER BY nums DESC LIMIT 3 WITH TIES;
ログイン後にコピー

このクエリは正しく {10, 9, 8, 8} を返します。 .

以上がSQL Server の TOP n WITH TIES を PostgreSQL でレプリケートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート