Postgres 13 voegt ten slotte WITH TIES
toe . Zie:
- Groter dan of gelijk aan ALL() en gelijk aan MAX() snelheid
Er is geen WITH TIES
clausule tot PostgreSQL 12, zoals in SQL Server.
In PostgreSQL zou ik dit vervangen door 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;
Voor alle duidelijkheid:rank()
heeft gelijk, dense_rank()
zou verkeerd zijn (te veel rijen retourneren).
Beschouw dit citaat uit de SQL Server-documenten (van de link hierboven):
Als expressie bijvoorbeeld is ingesteld op 5 maar 2 extra rijen overeenkomen met de waarden van de ORDER BY-kolommen in rij 5, bevat de resultaatset 7 rijen.
Het werk van WITH TIES
is om alle peers van de laatste rij bovenaan op te nemen n zoals gedefinieerd door de ORDER BY
clausule. rank()
geeft exact hetzelfde resultaat.
Om er zeker van te zijn, heb ik getest met SQL-server, hier is een live demo.
En hier is een handiger SQLfiddle.