PostgreSQL相当于TOP n WITH TIES:LIMIT"with ties"?

And*_*rew 10 sql postgresql window-functions sql-limit

我在SQL Server中寻找类似的东西:

SELECT TOP n WITH TIES FROM tablename
Run Code Online (Sandbox Code Playgroud)

LIMIT在PostgreSQL中知道,但是上面存在的相同吗?我只是很好奇,因为它每次都会为我节省额外的查询.

如果我有一个Numbers属性表nums:{10, 9, 8, 8, 2}.我想做的事情如下:

SELECT nums FROM Numbers ORDER BY nums DESC LIMIT *with ties* 3
Run Code Online (Sandbox Code Playgroud)

它应该返回,{10, 9, 8, 8}因为它需要前3加上额外的,8因为它绑定另一个.

Erw*_*ter 10

PostgreSQL中没有像SQL Server中那样的WITH TIES子句. 在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;
Run Code Online (Sandbox Code Playgroud)

要清楚,rank()是对的,dense_rank()会是错的(返回太多行).
请考虑SQL Server文档中的这句话(来自上面的链接):

例如,如果expression设置为5但是另外两行与第5行中ORDER BY列的值匹配,则结果集将包含7行.

这项工作的目的WITH TIES是包括该子句定义的前n行中最后一行的所有对等体ORDER BY.rank()给出完全相同的结果.

为了确保,我使用SQL服务器进行了测试,这是一个现场演示.
这里有一个更方便的SQLfiddle.