TOP n WITH TIES と同等の PostgreSQL
SQL Server でデータの取得を処理する場合、TOP n WITH TIES 句を使用すると、テーブルの最初の n 行 (最後の位置で同点の行を含む)。この機能により、同等の値を持つすべての行が返されるため、追加のクエリが不要になります。
PostgreSQL には、WITH TIES 句に直接相当するものはありません。ただし、同じ結果を達成するアプローチが 2 つあります。
ランク サブクエリの使用
WITH cte AS ( SELECT *, RANK() OVER (ORDER BY <column_name>) AS rnk FROM tablename ) SELECT * FROM cte WHERE rnk <= n;
このメソッドは、テーブル内の各行にランクを割り当てます。同順位の同順位。その後、LIMIT 句を使用して、n までのランクを持つ行のみを返します。
配列集約の使用
もう 1 つの方法では、配列集約と UNNEST 関数を使用します。結合された行をグループ化して返す:
SELECT UNNEST( ARRAY_AGG(DISTINCT nums) OVER ( ORDER BY nums DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) ) AS nums FROM Numbers ORDER BY nums DESC LIMIT n;
このアプローチでは、すべての個別の値が集計されます。の num を配列に取り込み、ネストを解除して結合された行を返します。 LIMIT 句により、上位 n 個の値のみが返されるようになります。
PostgreSQL 13 以降
PostgreSQL 13 では、次と直接同等の WITH TIES 句が導入されたことは注目に値します。 SQL Server の実装。したがって、PostgreSQL 13 以降を使用している場合は、次の構文を使用できます:
SELECT TOP n WITH TIES nums FROM Numbers ORDER BY nums DESC;
これにより、PostgreSQL で結合された行を取得するプロセスが簡素化され、代替メソッドが不要になります。
以上がPostgreSQL で SQL Server の TOP n WITH TIES 機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。