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