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

在 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  |  50000devj001  |  50000mscs001  |  45000sqlp001  |  45000gsql001  |  40000
(5 rows)

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

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

在这里插入图片描述

pgdb01=# select nameinfo,salary from t_employees ORDER BY salary DESC FETCH FIRST 3 ROWS WITH TIES;nameinfo | salary 
----------+--------user001  |  50000devj001  |  50000mscs001  |  45000sqlp001  |  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  |  50000devj001  |  50000mscs001  |  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.mzph.cn/bicheng/31709.shtml

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

相关文章

四,SSM整合-前后端分离(实现分页+前后端校验)

分页与校验 实现功能07-分页显示列表需求分析/图解思路分析代码实现完成测试 实现功能08-带条件查询分页显示列表需求分析/图解思路分析代码实现 实现功能09-添加家居表单前端校验需求分析/图解思路分析代码实现 实现功能10-添加家居表单后端校验需求分析/图解思路分析代码实现…

华为海思CPU解读

安全可靠CPU测评结果(华为海思篇) 中国信息安全测评中心于2024年5月20日发布安全可靠测评结果公告(2024年第1号),公布依据《安全可靠测评工作指南(试行)》的测评结果,自发布起有效期…

可视化数据科学平台在信贷领域应用系列七:自动机器学习(下篇)

在当今金融科技迅速发展的时代,自动机器学习(AutoML)逐步成为了信贷风控领域的重要工具。随着大数据和人工智能技术的进步以及信贷风险环境的快速变化,传统人工建模模式的时效性已经难以应对复杂多变的挑战。自动机器学习框架将数…

海外版coze前端代码助手

定位 解决前端同事的开发问题 参数配置 测试 支持 最屌的大模型及语音播报。 体验地址 海外版前端代码助手 需要魔法才能体验油

2024.6最最新版MySQL数据库安装(保姆级教程,不懂你捶我)

1.MySQL数据库下载 1.打开MySQL官网 如下页面 2.下翻网页到最底部,找到Download,点击第一个MySQL Community Server 3.选择自己需要的版本以及系统的MySQL: 4.跳转页面会有一个登录/注册页面,这里我们不鸟他,直接开始下载 2.MySQL数据库安装 1.双击我们刚刚下载的安装包 2.勾…

编码RNA Terc-53和透明质酸受体Hmmr可调节小鼠的衰老

近期,厦门大学王耿教授团队在Protein & Cell(IF21.1)上发表题为“Noncoding RNA Terc-53 and hyaluronan receptor Hmmr regulate ageing in mice.”的研究。研究团队构建了一系列Terc-53小鼠模型,发现Terc-53小鼠表现出与年龄…

艾尔登法环攻略教程 教你怎么达成怎么进入DLC的前置条件

《艾尔登法环》是一款黑暗幻想风开放世界角色扮演动作游戏,该游戏让玩家走进辽阔的场景与地下迷宫探索未知,挑战困难重重的险境,同时体验登场角色之间的利害关系谱成的群像剧。其广阔的开放世界、深邃的剧情探索、极具挑战性的战斗系统&#…

stable diffusion 模型融合

【抛砖引玉】GhostMixV2.0的制作过程及关于Checkpoint模型融合的一点经验 - 知乎大家好,我是Ghost_Shell,也是GhostMix的作者。本来想写一篇文章整体介绍一下模型,一些你们可能没察觉到,但我非常固执的理念,也算是模型的特性。结果发现写太长了,就分开两部分,第一部分是…

【C++ | 重载运算符】一文弄懂C++运算符重载,怎样声明、定义运算符,重载为友元函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-21 2…

银河麒麟V10安装docker和docker-compose

1. 说明 系统镜像使用的是Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso如果是在VMware中安装这个系统,需选择Ubuntu,如果选Centos会有问题。 尝试使用在线方式安装docker,报了很多错误,比较麻烦,建议使用离…

xss初识(xss-lab)

XSS跨站脚本 XSS漏洞概述 XSS被称为跨站脚本攻击(Cross-site scripting),由于和CSS(Cascading Style Sheets) 重名,所以改为XSS。 XSS主要基于javascript语言完成恶意的攻击行为,因为javascri…

前端代码打包教程

一、 首先解压并进入源码包中,源码文件是下载的完整版安装包的 view/ 目录下,平台后台是 admin.zip ,商户后台是 mer.zip , H5/公众号/小程序是 uniapp.zip ,2.0级以上版本还有客服的源码包; 二、 打包,移动端和后台的打包方式不同 平台后台…

echarts+vue2实战(一)

目录 一、项目准备 二、(横向分页)柱状图 2.1、动态刷新 2.2、UI调整 2.3、分辨率适配 三、(竖向平移)柱状图 3.1、平移动画 3.2、不同数值显示不同颜色 四、(下拉切换)折线图 4.1、切换图表和分辨率适配 4.2、UI调整 五、(三级分类)饼图 5.1、数据切换 六、圆环…

使用Tkinter创建带查找功能的文本编辑器

使用Tkinter创建带查找功能的文本编辑器 介绍效果代码解析创建主窗口添加菜单栏实现文件操作实现查找 完整代码 介绍 在这篇博客中,我将分享如何使用Python的Tkinter库创建一个带有查找功能的简单文本编辑器。 效果 代码解析 创建主窗口 import tkinter as tkcl…

Offset Explorer 连接SASL PLAIN鉴权的Kafka

1、填写Kafka信息 2、配置鉴权信息 Security 选择 SASL PLAINTEXT JAAS Config 配置账号密码 org.apache.kafka.common.security.plain.PlainLoginModule required username"账号"password"密码";

[Vulnhub] Troll FTP匿名登录+定时任务权限提升

信息收集 IP AddressPorts Opening192.168.8.104TCP:21,22,80 $ nmap -sC -sV 192.168.8.104 -p- --min-rate 1000 Nmap scan report for 192.168.8.104 (192.168.8.104) Host is up (0.0042s latency). Not shown: 65532 closed tcp ports (conn-refused) PORT STATE SER…

openh264 宏块级码率控制源码分析

openh264 宏块级码率控制函数关系 宏块级核心函数分析 WelsRcMbInitGom函数 功能:openh264 码率控制框架中宏块级码率控制函数,根据是否启用GOM QP来决定如何设置宏块的QP值,以控制编码的质量和比特率。原理过程: 函数参数&…

“打造智能售货机系统,基于ruoyi微服务版本开源项目“

目录 # 开篇 售货机术语 1. 表设计说明 2. 页面展示 2.1 区域管理页面 2.2 合作商管理页面 2.3 点位管理页面 3. 建表资源 3.1 创建表的 SQL 语句(包含字段备注) 1. Region 表 2. Node 表 3. Partner 表 4. 创建 tb_vending_machine 表的 S…

【启明智显产品介绍】Model3C工业级HMI芯片详解专题(一)芯片性能

【启明智显产品介绍】工业级HMI芯片Model3C详解(一)芯片性能 Model3C 是一款基于 RISC-V 的高性能、国产自主、工业级高清显示与智能控制 MCU,配置平头哥E907,主频400MHz,强大的 2D 图形加速处理器、PNG/JPEG 解码引擎…

【Conda】修改 Conda 默认的虚拟环境位置

文章目录 问题描述分析与解决查看默认安装位置修改 .condarc 文件修改权限 参考资料 问题描述 Conda 的虚拟环境默认安装在 C 盘。时间久了,C 盘上的内存会被大量占用,影响电脑性能。于是想到修改虚拟环境的默认存放位置,改到自定义的位置。…