赋闲随感

自离职以来已经让自己闲了将近一个月了,之前是完整的休息了差不多一个多周,然后开始找工作。工作的事情不是像自己想象的那么顺利,中间经历了一些曲折,然而终究有了个结果,得来并不容易。
最开始离职的时候心里抱有的那份梦幻般的自信也受到了不少打击,先是内推受阻,自己玩的时间也有点多,面试的相关内容却没有好好准备。自控能力明显下降,这是自己懒惰的最直接表现。内推的面试回来之后,才有着深深的懊悔,懊恼自己没有好好准备,以为自己脑袋里记住的那点东西足以应付各种面试,足以征服任何自己要去面试的职位。
眼高手低,自恋自大。最近相当一段时间以来自己似乎都是这个状态。直到开始找工作,让今年并不太好的就业形势一点一点打磨着自己,刺激着自己,惊醒着自己,好在终于醒了过来,为时未晚。
自工作以来,工作上的变动并不少,之前的一步一步的变动,现在看来由于自己不少的决定由于信息劣势的客观因素和躁动不安的内心的主观因素,导致自己的决策并不那么好,也许是当时比较好的选择,但同时也造就了今天的困境。
鉴于工作变动较多,自己缺乏稳定宽松的环境用来提高和学习,因此对这次的工作选择格外慎重。因为接下来的这个工作不只是想要换个环境,有个学习的机会,更重要的是自己一个选择行业的机会,而计划中接下来几年内会在同一个公司同一个行业内深入发展,使得这次的选择又格外的重要。
先写到这里,回头继续。

row_number() over()用例及相近函数rank()和dense_rank()的介绍

今天在群里跟一群同学聊天,恍然发现有个同学正在朝dba的方向发展,正好脑子里有个以前的问题想要问一下,问题是:row_number() over()使用partition by的时候,后面条件约束使用什么关键词会导致前面的partition by失效。结果同学会order by,但是木有接触过partition by。。。
早饭都忘了吃了。。
这是个问题啊,虽然那次开发的时候写的语句出现的现象不一定具有典型意义,但是我觉得这个函数用起来很舒服,有很多让我个人很满意的功能,以后要用就不能不弄明白这些问题。同学不能解决,那就顺手在网上找一下看有没有相关的文档能参考一下了。
百度,搜索,关键词 “row_number partition by什么情况下会失效”,查询结果发现,没有针对这个问题的,但是前两项竟然是对row_number over partiton by 做的不错的解释,另外顺带介绍了另外两个具有相同功能但是不同分组排序结果的方法,顿时觉得值得了。现在把这些解释都放上来以做备用。
<
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的
>
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
SQL> SELECT G.*, ROW_NUMBER() OVER(PARTITION BY a ,b ORDER BY c DESC) ROWN
2 from (select ‘1’ a, ‘2’ b, ‘1’ c
3 from dual
4 union all
5 select ‘1’, ‘2’, ‘2’
6 from dual
7 union all
8 select ‘1’, ‘3’, ‘3’
9 from dual
10 union all
11 select ‘1’, ‘3’, ‘4’
12 from dual
13 union all
14 select ‘1’, ‘4’, ‘5’ from dual
15 union all
16 select ‘1’,’3′,’5’from dual) G
17 ;
A B C ROWN
– – – ———-
1 2 2 1
1 2 1 2
1 3 5 1
1 3 4 2
1 3 3 3
1 4 5 1
6 rows selected
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。
语句一:
select row_number() over(order by sale/cnt desc) as sort, sale/cnt
from (
select -60 as sale,3 as cnt from dual union
select 24 as sale,6 as cnt from dual union
select 50 as sale,5 as cnt from dual union
select -20 as sale,2 as cnt from dual union
select 40 as sale,8 as cnt from dual);
执行结果:
SORT SALE/CNT
———- ———-
1 10
2 5
3 4
4 -10
5 -20
语句二:查询员工的工资,按部门排序
select ename,sal,row_number() over (partition by deptno order by sal desc) as sal_order from scott.emp;
执行结果:
ENAME SAL SAL_ORDER
——————– ———- ———-
KING 5000 1
CLARK 2450 2
MILLER 1300 3
SCOTT 3000 1
FORD 3000 2
JONES 2975 3
ADAMS 1100 4
SMITH 800 5
BLAKE 2850 1
ALLEN 1600 2
TURNER 1500 3
WARD 1250 4
MARTIN 1250 5
JAMES 950 6
已选择14行。
语句三:查询每个部门的最高工资
select deptno,ename,sal from
(select deptno,ename,sal,row_number() over (partition by deptno order by sal desc) as sal_order
from scott.emp) where sal_order <2;
执行结果:
DEPTNO ENAME SAL
———- ——————– ———-
10 KING 5000
20 SCOTT 3000
30 BLAKE 2850
已选择3行。
语句四:
select deptno,sal,rank() over (partition by deptno order by sal) as rank_order from scott.emp order by deptno;
执行结果:
DEPTNO SAL RANK_ORDER
———- ———- ———-
10 1300 1
10 2450 2
10 5000 3
20 800 1
20 1100 2
20 2975 3
20 3000 4
20 3000 4
30 950 1
30 1250 2
30 1250 2
30 1500 4
30 1600 5
30 2850 6
已选择14行。
语句五:
select deptno,sal,dense_rank() over(partition by deptno order by sal) as dense_rank_order from scott.emp order by deptn;
执行结果:
DEPTNO SAL DENSE_RANK_ORDER
———- ———- —————-
10 1300 1
10 2450 2
10 5000 3
20 800 1
20 1100 2
20 2975 3
20 3000 4
20 3000 4
30 950 1
30 1250 2
30 1250 2
30 1500 3
30 1600 4
30 2850 5
已选择14行。
语句六:
select deptno,ename,sal,lag(ename,1,null) over(partition by deptno order by ename) as lag_ from scott.emp order by deptno;
执行结果:
DEPTNO ENAME SAL LAG_
———- ——————– ———- ——————–
10 CLARK 2450
10 KING 5000 CLARK
10 MILLER 1300 KING
20 ADAMS 1100
20 FORD 3000 ADAMS
20 JONES 2975 FORD
20 SCOTT 3000 JONES
20 SMITH 800 SCOTT
30 ALLEN 1600
30 BLAKE 2850 ALLEN
30 JAMES 950 BLAKE
30 MARTIN 1250 JAMES
30 TURNER 1500 MARTIN
30 WARD 1250 TURNER
以上用例和详细介绍来自《https://www.blogjava.net/kxbin/articles/360195.html》

打算

又有段时间没有写自己的博客了,最近一段时间总是忙的天昏地暗,加班加到要吐。连春节放假回家都不怎么想开电脑。
我发现,让一个人讨厌他自己自以为喜欢的事物比较不错的方法,就是让这件事变成他的工作。当一件自以为有意思的事情变成了枯燥乏味而又不得不不停重复的工作的时候,我嘞个去  多么难以忍受!
刚来公司的时候我就跟面试我的人说过,适当的加班可以接受。啥工作还没有个紧急情况,偶尔工作量大的时候呢对吧,咱可以理解。然而这种毫无节制的加班,并且习以为常,就难以接受了。加班加到几乎没有了自己的正常生活,每天每天都是工作,那么工作的意义就不再存在,还工作下去有设么么意思呢。
我从来认为,工作是为了生活。当工作把生活的时间破坏甚至完全占据,那么这份工作就是十分不值得的。所以我决定离开。
一直有些犹豫自己到底想要进入什么样的公司。就我本身而言,我想进入一个比较追寻潮流,做互联网弄潮儿的企业,因为这样的企业里可以较多的接触到最新的概念,最新的技术,这对我比较有好处,同时这样的企业也有益于我以后创业的打算。毕竟更新的东西,才更容易是第一个吃螃蟹的人,也许会更容易掘金。
同时也有些倾向于做一些固定业务的公司,这样在这个行业中精通后,可以比较稳定。
另外我还想去澳洲,基于某些原因。所以这一切都还在思考中。