PostgreSQL中 FETCH FIRST ... WITH TIES 是查询结果中限制返回的行数

news2024/11/24 10:55:49

在 PostgreSQL 中,FETCH FIRST … WITH TIES 是一个在查询结果中限制返回的行数,但同时确保与最后一行具有相同排序值的所有行都被包括进来的子句。这通常与 ORDER BY 子句一起使用。

当您使用 FETCH FIRST n ROWS ONLY 时,您只会得到前 n 个排序后的行。但是,如果您希望包括与第 n 个行具有相同排序值的所有行(即“并列”的行),则可以使用 WITH TIES。

FETCH FIRST … WITH TIES 是 SQL 2008 标准的一部分,并且在 PostgreSQL 13 及更高版本中可用。如果您使用的是更早版本的 PostgreSQL,您将需要使用不同的方法来达到相同的效果,例如使用LIMIT … OFFSET … , 窗口函数或子查询。

以下是一个简单的示例来说明这一点:

假设我们有一个名为 t_employees 的表,其中包含员工的姓名和薪水:

CREATE TABLE t_employees (  
    nameinfo varchar(32),  
    salary numeric  
);  
  
INSERT INTO t_employees (nameinfo , salary) VALUES  
('user001', 50000),  
('devj001', 50000),  
('mscs001', 45000),  
('sqlp001', 45000),  
('gsql001', 40000);

pgdb01=# select * from t_employees;
 nameinfo | salary 
----------+--------
 user001  |  50000
 devj001  |  50000
 mscs001  |  45000
 sqlp001  |  45000
 gsql001  |  40000
(5 rows)

如果我们想找到薪水最高的前两个员工,但希望包括所有薪水一样名次并列的员工,我们可以这样做:

pgdb01=# select nameinfo,salary from t_employees ORDER BY salary DESC FETCH FIRST 1 ROWS WITH TIES;
 nameinfo | salary 
----------+--------
 user001  |  50000
 devj001  |  50000
(2 rows)

由于 user001 和 devj001 的薪水都是 50000(并列第一),且使用了WITH TIES,相同排序值的所有行都被包括结果中

pgdb01=# select nameinfo,salary from t_employees ORDER BY salary DESC FETCH FIRST 2 ROWS WITH TIES;
 nameinfo | salary 
----------+--------
 user001  |  50000
 devj001  |  50000
(2 rows)

在这里插入图片描述

pgdb01=# select nameinfo,salary from t_employees ORDER BY salary DESC FETCH FIRST 3 ROWS WITH TIES;
 nameinfo | salary 
----------+--------
 user001  |  50000
 devj001  |  50000
 mscs001  |  45000
 sqlp001  |  45000
(4 rows)

由于 user001 和 devj001 的薪水都是 50000(并列第一),并且 mscs001和 sqlp001的薪水都是 45000(并列第二),因此上述查询将返回 user001 、devj001 、mscs001和 sqlp001的信息。

如果使用LIMIT … OFFSET … 不会像 FETCH FIRST … WITH TIES 那样包含并列的行,出现间隙gap

pgdb01=# select nameinfo,salary from t_employees ORDER BY salary DESC LIMIT 3;
 nameinfo | salary 
----------+--------
 user001  |  50000
 devj001  |  50000
 mscs001  |  45000
(3 rows)

明显的sqlp001信息并返回在结果集中。此时gap就出现了,返回结果并非预期结果。

结合使用

虽然 FETCH FIRST … WITH TIES 和 LIMIT … OFFSET … 是不同的功能,但在某些情况下,您可能想要结合使用它们来达到特定的目的。但是,PostgreSQL 并不直接支持在一个查询中同时使用这两个子句。相反,您可能需要使用子查询或窗口函数来达到类似的效果。

例如,如果您想使用 WITH TIES 进行分页,您可能需要先确定每页的“边界”值(即每页最后一行的排序值),然后在外部查询中使用这个值来过滤结果。这通常涉及到更复杂的查询和逻辑。

总的来说,选择使用 FETCH FIRST … WITH TIES 还是 LIMIT … OFFSET … 取决于您的具体需求。如果您需要处理并列值并包括它们在内,那么 FETCH FIRST … WITH TIES 是更好的选择。如果您只是简单地需要限制返回的行数或进行分页,那么 LIMIT … OFFSET … 就足够了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1846335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flash页、扇区、块的区别

文章目录 前言玩转Flash的小知识一、页(Page)二、扇区(Sector)三、块(Block)总结存储基础知识 瑞萨芯片简介(片上资源分配)和工具链使用 前言 FLASH 存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速…

Web开发技术大作业(HTML\CSS\PHP\MYSQL\JS)

从6月13日到6月15日,经过一系列的操作,终于把老师布置的大作业写完了,虽然有很多水分,很多东西都是为了应付(特别是最后做的那几个网页),真的是惨不忍睹,不过既然花时间写了&#xf…

WIC 图像处理初体验——读取像素的值

先放上运行结果&#xff1a; 可以发现红绿蓝是从后往前的。 必须以C方式编译代码&#xff01; // 参考资料&#xff1a;https://learn.microsoft.com/zh-cn/windows/win32/wic/-wic-lh #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <wincodec.h>…

164万年后的日期解析引发的OOM

名词解释 商家销项发票业务&#xff08;平台给商家开票&#xff09;&#xff0c;是平台提供给商家的工具产品&#xff0c;商家购买了平台的服务&#xff0c;那么平台需要开票给商家。 前言 本文所描述的问题&#xff0c;是应用的OOM引发的接口成功率下跌&#xff0c;排查过程中…

用于视觉对象跟踪的序列到序列学习

阅读完此论文后&#xff0c;对着代码过一遍思路 原文地址&#xff1a;https://arxiv.org/abs/2304.14394 本文将视觉跟踪建模为一个序列生成问题&#xff0c;以自回归的方式预测目标边界框。抛弃了设计复杂的头网络&#xff0c;采用encoder-decoder transformer architecture…

手机数据如何恢复?11 款最佳安卓手机恢复软件

媒体可能由于各种原因而从您的设备中删除&#xff0c;可能是意外或病毒攻击。 在这些情况下&#xff0c;照片恢复应用程序是唯一的解决方案。理想的照片恢复应用程序取决于各种因素&#xff0c;例如存储设备的损坏程度、删除照片后的持续时间以及应用程序使用的恢复算法的有效性…

玩玩大模型:总结归纳可以,策划创新拉垮

最近身边的人都在研究大模型。太深入的理解不了&#xff0c;有一些人会讲讲promt提示&#xff0c;学了几招。 比如&#xff1a; #角色 你是一个美食博主 #条件 我只有xxx元&#xff0c;在xxx.... #任务 找一家好吃的当地特色餐馆... 多试几次&#xff0c;有些结果很有参考价值…

前端学习-day10

文章目录 01-体验平面转换02-平移效果03-绝对定位元素居中04-案例-双开门06-转换旋转中心点07-案例-时钟-转换原点08-平面转换-多重转换09-缩放效果10-案例-按钮缩放11-倾斜效果12-渐变-线性13-案例-产品展示14-渐变-径向15-综合案例-喜马拉雅 01-体验平面转换 <!DOCTYPE h…

PCAtools|主成分分析

library(PCAtools) library(tidyverse) ls(package:PCAtools) iris <- as.data.frame(iris) iris <- iris %>% mutate(class str_c("a",1:dim(iris)[1],sep "")) rownames(iris) <- iris$class iris <- iris[,-6] head(iris) # 构建矩阵 …

国有企业数字化转型常见思考框架与路线图

一、国有企业数字化转型思考框架 在之前的十九届四中全会《关于坚持和完善中国特色社会主义制度推进国家治理体系和治理能力现代化若干重大问题的决定》中明确“推进国有经济布局优化和结构调整&#xff0c;发展混合所有制经济&#xff0c;增强国有经济竞争力、创新力、控制力…

麒麟移动运行环境(KMRE)——国内首个开源的商用移固融合“Android生态兼容环境”正式开源

近日&#xff0c;由麒麟软件研发的KMRE&#xff08;Kylin Mobile Runtime Environment&#xff0c;麒麟移动运行环境&#xff09;在openKylin&#xff08;开放麒麟&#xff09;社区正式发布&#xff0c;为Linux桌面操作系统产品提供了高效的Android运行环境解决方案。这也是国内…

【免费API推荐】:各类API资源免费获取【11】

欢迎来到各类API资源的免费获取世界&#xff01;幂简集成为您提供了一个集合了各种免费API接口的平台。无论您是开发者、数据分析师还是创业者&#xff0c;都可以通过我们的平台轻松免费获取所需的API资源。幂简精心整理了各类API接口&#xff0c;涵盖了不同领域的需求&#xf…

如何避免在React中的回调函数中使用箭头函数可能引起的内存泄漏?

在React中&#xff0c;箭头函数在回调函数中的使用确实可能引发性能问题&#xff0c;尤其是当这些函数在渲染方法或者组件内部被定义时。每次组件重新渲染时&#xff0c;都会创建这些函数的新实例&#xff0c;这可能导致不必要的计算和内存使用&#xff0c;甚至在某些情况下引发…

大模型RAG应用优化实战

之前体验OpenAI GPT-4o模型的时候&#xff0c;感觉到大语言模型进化的太快&#xff0c;基于AI应用做出的努力可能很快就被新一代模型降维打击&#xff0c;变得没有价值了&#xff0c;“人生苦短&#xff0c;终归尘土”&#xff0c;最终都化为虚无&#xff0c;还有什么意义呢&am…

多维表格/业务库表格大数据量性能瓶颈

先说最终结论&#xff1a;Angular 组件创建性能损耗是当下主要的性能瓶颈 理由&#xff1a; 基于以往编辑器性能优化的经验&#xff0c;编辑器在动态渲染内容时会创建很多壳子组件&#xff08;也就是Angular 组件&#xff09;&#xff0c;排查的时候就发现如果略这些壳子组件性…

探索Lazada商品数据宝库——一键获取商品详细数据信息

一、引言 在电商领域&#xff0c;Lazada凭借其广泛的商品种类和便捷的购物体验&#xff0c;成为东南亚地区备受欢迎的电商平台。然而&#xff0c;对于许多商家和数据分析师来说&#xff0c;获取商品详细数据信息却是一项繁琐而重要的任务。为了解决这个问题&#xff0c;我们精…

内容安全复习 9 - 身份认证系统攻击与防御

文章目录 基于生物特征的身份认证系统概述基于生物特征的身份认证 人脸活体检测检测方法未解决问题 基于生物特征的身份认证系统概述 作用&#xff1a;判别用户的身份、保障信息系统安全。 是识别操作者身份的过程&#xff0c;要保证其**物理身份&#xff08;现实&#xff0…

openppp2 命令行接口详解

openppp2 是一个工作在 OSI/3 Layer 网络通信层的虚拟以太网工具链的开源软件&#xff0c;在查阅本文之前&#xff0c;人们可以查阅以下资料。 开源仓库&#xff1a; liulilittle/openppp2: PPP PRIVATE NETWORK™ 2 VPN Next Generation Reliable and Secure Virtual Etherne…

一次压测引发的数据库 CPU 飙升

作者&#xff1a;昀鹤 一次压测过程中&#xff0c;当数据库的 qps 和 tps 都正常时&#xff0c;如果 cpu 利用率异常的高&#xff0c;应该如何排查&#xff1f;希望通过这篇文章&#xff0c;给你一些启发... 一、业务背景 业务需要控制频道内兑换现金的数量&#xff0c;于是在…

恭喜行云绽放,24年再度荣获国家鼓励的企业软件证书

在刚刚过去的五月份&#xff0c;行云绽放再次传来一个好消息&#xff0c;那就是2024年行云绽放再度荣获国家鼓励的企业软件证书。 什么是国家鼓励的企业软件证书&#xff1f; 国家鼓励的企业软件证书被称为“国家鼓励的软件企业证书”&#xff0c;这一证书由中国软件行业协会…