ホームページ >データベース >mysql チュートリアル >PostgreSQL は「TOP n WITH TIES」機能をサポートしていますか?
LIMIT with Ties: PostgreSQL は実装していますか?
SQL Server では、構文 TOP n WITH TIES は最初の n 行を次の行とともに取得します。結合された行。ただし、PostgreSQL ユーザーは、同等の構文があるかどうか疑問に思うかもしれません。
PostgreSQL の解決策: WITH TIES (PostgreSQL 13)
PostgreSQL 13 以降、WITH TIES 句は紹介された。この句は SQL Server の対応する句と同様に動作し、上位 n 行と結合された行をフェッチします。
PostgreSQL 12 以前の代替
PostgreSQL 13 より前では、 TOP n WITH TIES に直接相当するものではありませんでした。回避策の 1 つは、次のクエリを実行することです。
WITH cte AS ( SELECT *, rank() OVER (ORDER BY <something>) AS rnk FROM tbl ) SELECT * FROM cte WHERE rnk <= n;
ここで、rank() は各行にランクを割り当て、最後のランク n に同順位の行が含まれます。
例
値 {10, 9, 8, 8, 2} を持つテーブル Numbers について考えます。次のクエリは、PostgreSQL 12 以前の代替メソッドを使用すると、{10, 9, 8, 8} を返します:
WITH cte AS ( SELECT nums, rank() OVER (ORDER BY nums DESC) AS rnk FROM Numbers ) SELECT * FROM cte WHERE rnk <= 3;
注: この代替メソッドで使用される Rank() 関数これは、dense_rank() とは異なります。後者では返される行が多すぎるため、誤った結果が生成されます。
以上がPostgreSQL は「TOP n WITH TIES」機能をサポートしていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。