场景

在生产中,经常会看到窗口函数中对排序字段加 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 后加判断条件的作用是什么?相关推荐

  1. 替代触发器如何加判断 条件_《小逻辑》:如何设定目标,制定计划,做出更好的选择...

    技能催生技能.一旦成功达到了一个目标,就为将来实现更加长远的目标搭建了脚手架. 2020年听起来很遥远,但其实也只有三四个月的时间了.回想一下,年初的时候,大家怀着对新年的期许,制定了很多目标和计划. ...

  2. for循环两个分号之间不要乱加判断条件(记洛谷P2141题WA的经历,Java语言描述)

    题目要求 P2141题目链接 分析 暴力法可解--我们只需遍历一遍数组,在里面再遍历一次,再遍历一次,共三层嵌套,需要保证内层counter数值不能与外面诸层的counter相同~~ 暴力还可防漏,很 ...

  3. 简单的签到代码_开窗排序函数解决连续签到问题|SQL

    开窗排序函数除了在处理简单的排序问题外,它的应用场景远比我们想的要多.本文将对两个问题,介绍开窗排序函数的用法. 一.问题 有一张用户签到表[签到表],标记每天用户是否签到(说明:该表包含所有用户所有 ...

  4. SQL 分组排序后取值

    SQL 分组排序后取值 场景前要: 从前有三个班级,每个班级的学生成绩各异,有一天睿智的校长希望知道这一年中,每个班级近一年里所有的学生成绩信息,和查询每个班级近一年里所有第一名的学生成绩信息,故事由 ...

  5. SQL语句之排序查询--ORDER BY(order by)

    SQL语句之排序查询–ORDER BY(order by) 语法 select 查询列表 from 表 (where 筛选条件) order by 排序列表 [asc:升序,desc降序] 说明:对于 ...

  6. SQL Server 中as语句后加英文,标点符号等内容

    SQL中as语句后加英文,标点符号等内容 SELECT  isnull(EndTime,getdate()) as '完成时间(H)' FROM [PCMIS].[dbo].[ProcessOfInt ...

  7. sql ROW_NUMBER() 排序函数

    sql ROW_NUMBER() 排序函数 1使用row_number()函数进行编号:如 View Code 1 select email,customerID, ROW_NUMBER() over ...

  8. sql server排序慢_SQL 查询调优之 where 条件排序字段以及 limit 使用索引的奥秘

    (给数据分析与开发加星标,提升数据技能) 作者:风过无痕-唐 www.cnblogs.com/tangyanbo/p/6378741.html 奇怪的慢sql 我们先来看2条sql 第一条: sele ...

  9. mysql开窗函数_魔幻的SQL开窗函数,为您打开进阶高手的一扇天窗

    经常写SQL脚本的朋友,通常会有一种迷之自信,似乎各种问题都有自己的一套解决方案.时间长了,人的思维可能会逐渐固化.思维固化能提高工作效率,但从某些角度看是很可怕的,我们也同时会失去接受新知识的内在动 ...

最新文章

  1. java 裁剪 pdf_Java PDF 切割、截取、合并工具类、转图片等
  2. OpenLayers加载搜狗地图
  3. WinCE流驱动加载的控制
  4. hypertrm超级终端_win7电脑怎么添加windows超级终端
  5. mysql5.6数据库执行mysqldump备份,报1862密码过期的处理方法。
  6. 11 java基础之继承:区分子类方法中变量的三种变量
  7. vivado软件安装教程
  8. java JSPX的介绍(转载)
  9. 1.1 wamp/wnmp 环境搭建
  10. php 失去焦点,jquery设置焦点方法focus()和jquery失去焦点方法blur()
  11. dockerfile使用DEBIAN_FRONTEND
  12. 快速删除node_modules目录的方法:指令rimraf
  13. mysql 1033_mysql报错1033 Incorrect information in file: ''''xxx.frm''''问题的解决方法(图)...
  14. 《埃尔维斯与安娜贝尔》配色分享
  15. Counter()函数进行排序后如何得到有序的键
  16. 戴尔 R730 服务器系统安装
  17. 数据库之逻辑设计阶段(候选码、主码、外码、范式…)
  18. vue项目实现文件下载中心:下载、取消下载、列表展示
  19. C++课程设计报告--通讯录管理系统
  20. 用友从“新”出发:“新”在哪里?

热门文章

  1. 山西计算机中考操作题,2017山西中考物理实验操作试题发布
  2. 【C#】七层登录机房重构
  3. 遍历JSON文件提取想要的内容
  4. 如何在Android引用第三方字体文件?
  5. RDMA Mellanox官方使用VPI verbs API的例子
  6. 橙色简约大气岗位竞聘个人简历PPT模板
  7. DNS-Challenge 2020下载
  8. PS工具栏之【选择工具栏和编辑工具栏】矩形和椭圆的使用技巧
  9. 酷栈云桌面开启“3+2”混合办公新趋势
  10. HTML学习---中文网页编码声明