Postgres 13 finalmente agrega WITH TIES
. Ver:
- Mayor o igual que ALL() e igual a MAX() velocidad
No hay WITH TIES
cláusula hasta PostgreSQL 12, como hay en SQL Server.
En PostgreSQL, sustituiría esto por 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;
Para ser claros, rank()
es correcto, dense_rank()
sería incorrecto (devolvería demasiadas filas).
Considere esta cita de los documentos de SQL Server (del enlace anterior):
Por ejemplo, si expresión se establece en 5 pero 2 filas adicionales coinciden con los valores de las columnas ORDENAR POR en la fila 5, el conjunto de resultados contendrá 7 filas.
El oficio de WITH TIES
es incluir todos los pares de la última fila en la parte superior n según lo definido por ORDER BY
cláusula. rank()
da exactamente el mismo resultado.
Para asegurarme, probé con el servidor SQL, aquí hay una demostración en vivo.
Y aquí hay un SQLfiddle más conveniente.