今天我们来整理一些比较常用,但有时候又不是很熟悉的函数,其实很多功能我们都可以通过比较复杂的SQL来实现,但是可能就会有多层的嵌套的情况,而且往往随着数据量的增长,性能会非常差,所以未避免这种情况,我们需要尽可能的使用数据库为我们提供的数据库函数或功能来实现,今天我们就来说说4个比较常用的功能,每一个都很实用,下面我们就详细的来说明一下.
第一个功能,with as(),以前我们写视图,为了避免视图过于复杂,过于太长,我们一般是将里面的视图分解,然后通过视图去读取视图,这样来简化视图开发,这样设计有一定的好处就是视图可以重用,但是如果我们的视图不具有重用的价值,就会让数据库的冗余太多,直接又看不出来引用关系,或通过视图后缀扩展,这又失去了重用的意义,所以还是将视图引用的放在一起比较好,所以我们引出了with as,这样我们可以有效减少视图数量,这样相关逻辑都写在了一起,这样效果很好.
第二个就是分组排序并添加序号,我们有时候需要对表中的数据进行分组,并根据组内信息进行重新编号,这样的操作就是分组编号排序,
select ROW_NUMBER() over(partition by t3.customerId order by t3.uid) as rownum
其中partition by就是按照那个字段进行分组,order by是组内数据的排序.ROW_NUMBER()函数用于生成具体的行号,每个分组的行号都是从1开始,如果不指定partition by就会直接进行检索数据的序号分配,从1开始.
第三个是PIVOT功能,我们有很多的时候需要将我们的列转为行,我们其实可以用case when加group by来实现,但是实现起来需要多层嵌套,可读性太差,所以我们数据库提供了pivot函数来解决这个功能,
第四个是UNPIVOT功能,顾名思义,他是PIVOT的反义词,就是列转行的功能.
以前我们不知道,都是使用最笨的办法,其实有很多好用的方法可以解决,只是我们不知道而已,往往都是了解常用的东西,就是常说的浅尝辄止,其实这种做法是非常错误的,我们对待每一项技术都应该深入研究,逐渐深入到方方面面,有很多我们不了解的技术,反过来说就是我们没有接触到相应的业务,没有去思考相应的解决方案,如果我们熟悉足够多的的业务场景,就会有针对的取学习相应的技术,所以说书到用时方恨少,多读书还是很有好处的,今天就总结到这里,只要有进步就是好事,不能停止学习的步伐,加油,虽然前路依然艰辛.