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.
| 归档时间: |
|
| 查看次数: |
9675 次 |
| 最近记录: |