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があります。