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

PostgreSQL で SQL Server の TOP n WITH TIES 機能を実現するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-31 19:01:13
オリジナル
843 人が閲覧しました

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

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

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