sql >> データベース >  >> RDS >> PostgreSQL

TOP n WITH TIESに相当するPostgreSQL:LIMIT with ties?

    Postgres 13 最後にWITH TIESを追加します 。参照:

    • ALL()以上でMAX()の速度に等しい

    WITH TIESはありません SQLServerにあるようなPostgreSQL12までの句。
    PostgreSQLでは、これをTOP n WITH TIES .. ORDER BY <something>の代わりに使用します。 :

    WITH cte AS (
       SELECT *, rank() OVER (ORDER BY <something>) AS rnk
       FROM   tbl
       )
    SELECT *
    FROM   cte
    WHERE  rnk <= n;
    

    明確にするために、rank() 正しいです、dense_rank() 間違っているでしょう(返される行が多すぎます)。
    SQL Serverのドキュメント(上記のリンクから)からのこの引用を検討してください:

    たとえば、式が5に設定されているが、追加の2行が行5のORDER BY列の値と一致する場合、結果セットには7行が含まれます。

    WITH TIESの仕事 一番上のnの最後の行のすべてのピアを含めることです ORDER BYで定義されているとおり 句。 rank() まったく同じ結果が得られます。

    念のため、SQLサーバーでテストしました。これがライブデモです。
    そして、より便利なSQLfiddleがあります。



    1. カンマ区切りのデータ列を結合する

    2. 悪名高いjava.sql.SQLException:適切なドライバーが見つかりません

    3. C#.netコードからSQLストアドプロシージャにnull変数を渡す方法

    4. SQLでコメントを追加する方法は?