Postgres 13 finalmente adiciona
WITH TIES
. Ver:- Maior ou igual a ALL() e igual a MAX() velocidade
Não há
WITH TIES
cláusula até o PostgreSQL 12, como existe no SQL Server.No PostgreSQL eu substituiria 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 claro,
rank()
está certo, dense_rank()
estaria errado (retornar muitas linhas).Considere esta citação dos documentos do SQL Server (do link acima):
Por exemplo, se a expressão for definida como 5, mas 2 linhas adicionais corresponderem aos valores das colunas ORDER BY na linha 5, o conjunto de resultados conterá 7 linhas.
O trabalho de
WITH TIES
é incluir todos os pares da última linha no topo n conforme definido pelo ORDER BY
cláusula. rank()
dá exatamente o mesmo resultado. Para ter certeza, eu testei com o SQL Server, aqui está uma demonstração ao vivo.
E aqui está um SQLfiddle mais conveniente.