SQL:开窗排序,在orderby后加判断条件的作用是什么?

更新时间:2023-07-07 17:44:03 阅读: 评论:0

SQL:开窗排序,在orderby后加判断条件的作⽤是什么?场景
在⽣产中,经常会看到窗⼝函数中对排序字段加 is not null 判断,类似这样的sql代码:
lect
*,
quitrow_number() over(partition by id order by amount_1 is not null desc,amount_2 is not null desc) from  ;
这种⽤法是什么意思呢?
验证
1、⾸先,建⼀张测试表:
create table test.zixuan_test(
a int,
b int,
c int,
d int
)
2、然后往⾥⾯插⼊测试数据:
yo
inrt into table test.zixuan_test values
上海教育出版社(1,null,3,4),
(1,3,null,4),monet
英文在线(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 的排序结果:
lect *,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 的排序结果:
lect *,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,则第三⾏的整体排名⽐第四⾏靠前。
cofee猜想:既然可以加is not null判断,那么是否加其他的判断条件,让指定数据的排名靠后呢?
5、测试order by 后⾯加不等于指定值的排序结果:
lect *,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的后⾯。
结论
在开窗排序时,可以对指定字段做过滤操作,不符合过滤条件的数据,会被排在后⾯。building缩写

本文发布于:2023-07-07 17:44:03,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1084007.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指定   数据   排序   培训   过滤   上海   判断   条件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图