SQL:开窗排序,在order by 后加判断条件的作用是什么?
场景
在生产中,经常会看到窗口函数中对排序字段加 is not null 判断,类似这样的sql代码:
select *,row_number() over(partition by id order by amount_1 is not null desc,amount_2 is not null desc) from test.xxxx;
这种用法是什么意思呢?
验证
1、首先,建一张测试表:
create table test.zixuan_test(a int,b int,c int,d int
)
2、然后往里面插入测试数据:
insert into table test.zixuan_test values
(1,null,3,4),
(1,3,null,4),
(1,3,2,null),
(1,null,2,null),
(1,null,3,4),
(1,1,2,5),
(null,null,null,null),
(2,4,3,4),
(3,0,5,1),
(null,2,3,1);
3、测试order by 后面加 is not null 的排序结果:
select *,row_number() over(partition by a order by b is not null desc,c is not null desc, d is not null desc) from test.zixuan_test;
4、测试order by 后面不加is not null 的排序结果:
select *,row_number() over(partition by a order by b desc,c desc, d desc) from test.zixuan_test;
主要对比a=1的几行数据,当加了is not null之后,即使写在前面的字段值较大,但后面的值有null,那么这条数据的排名也会靠后。
如:3中的第四行记录的b大于第三行记录,c等于第三行记录,但是由于d为null,而第三行记录的b c d都不为null,则第三行的整体排名比第四行靠前。
猜想:既然可以加is not null判断,那么是否加其他的判断条件,让指定数据的排名靠后呢?
5、测试order by 后面加不等于指定值的排序结果:
select *,row_number() over(partition by a order by b <> 3 desc,c is not null desc, d is not null desc) from test.zixuan_test;
如结果中第六行和第七行所示,当在order by b字段时添加b<>3的判断,则b=3的确实排在了b=1的后面。
结论
在开窗排序时,可以对指定字段做过滤操作,不符合过滤条件的数据,会被排在后面。
SQL:开窗排序,在order by 后加判断条件的作用是什么?相关推荐
- 替代触发器如何加判断 条件_《小逻辑》:如何设定目标,制定计划,做出更好的选择...
技能催生技能.一旦成功达到了一个目标,就为将来实现更加长远的目标搭建了脚手架. 2020年听起来很遥远,但其实也只有三四个月的时间了.回想一下,年初的时候,大家怀着对新年的期许,制定了很多目标和计划. ...
- for循环两个分号之间不要乱加判断条件(记洛谷P2141题WA的经历,Java语言描述)
题目要求 P2141题目链接 分析 暴力法可解--我们只需遍历一遍数组,在里面再遍历一次,再遍历一次,共三层嵌套,需要保证内层counter数值不能与外面诸层的counter相同~~ 暴力还可防漏,很 ...
- 简单的签到代码_开窗排序函数解决连续签到问题|SQL
开窗排序函数除了在处理简单的排序问题外,它的应用场景远比我们想的要多.本文将对两个问题,介绍开窗排序函数的用法. 一.问题 有一张用户签到表[签到表],标记每天用户是否签到(说明:该表包含所有用户所有 ...
- SQL 分组排序后取值
SQL 分组排序后取值 场景前要: 从前有三个班级,每个班级的学生成绩各异,有一天睿智的校长希望知道这一年中,每个班级近一年里所有的学生成绩信息,和查询每个班级近一年里所有第一名的学生成绩信息,故事由 ...
- SQL语句之排序查询--ORDER BY(order by)
SQL语句之排序查询–ORDER BY(order by) 语法 select 查询列表 from 表 (where 筛选条件) order by 排序列表 [asc:升序,desc降序] 说明:对于 ...
- SQL Server 中as语句后加英文,标点符号等内容
SQL中as语句后加英文,标点符号等内容 SELECT isnull(EndTime,getdate()) as '完成时间(H)' FROM [PCMIS].[dbo].[ProcessOfInt ...
- sql ROW_NUMBER() 排序函数
sql ROW_NUMBER() 排序函数 1使用row_number()函数进行编号:如 View Code 1 select email,customerID, ROW_NUMBER() over ...
- sql server排序慢_SQL 查询调优之 where 条件排序字段以及 limit 使用索引的奥秘
(给数据分析与开发加星标,提升数据技能) 作者:风过无痕-唐 www.cnblogs.com/tangyanbo/p/6378741.html 奇怪的慢sql 我们先来看2条sql 第一条: sele ...
- mysql开窗函数_魔幻的SQL开窗函数,为您打开进阶高手的一扇天窗
经常写SQL脚本的朋友,通常会有一种迷之自信,似乎各种问题都有自己的一套解决方案.时间长了,人的思维可能会逐渐固化.思维固化能提高工作效率,但从某些角度看是很可怕的,我们也同时会失去接受新知识的内在动 ...
最新文章
- java 裁剪 pdf_Java PDF 切割、截取、合并工具类、转图片等
- OpenLayers加载搜狗地图
- WinCE流驱动加载的控制
- hypertrm超级终端_win7电脑怎么添加windows超级终端
- mysql5.6数据库执行mysqldump备份,报1862密码过期的处理方法。
- 11 java基础之继承:区分子类方法中变量的三种变量
- vivado软件安装教程
- java JSPX的介绍(转载)
- 1.1 wamp/wnmp 环境搭建
- php 失去焦点,jquery设置焦点方法focus()和jquery失去焦点方法blur()
- dockerfile使用DEBIAN_FRONTEND
- 快速删除node_modules目录的方法:指令rimraf
- mysql 1033_mysql报错1033 Incorrect information in file: ''''xxx.frm''''问题的解决方法(图)...
- 《埃尔维斯与安娜贝尔》配色分享
- Counter()函数进行排序后如何得到有序的键
- 戴尔 R730 服务器系统安装
- 数据库之逻辑设计阶段(候选码、主码、外码、范式…)
- vue项目实现文件下载中心:下载、取消下载、列表展示
- C++课程设计报告--通讯录管理系统
- 用友从“新”出发:“新”在哪里?