随感

今天一天忙来忙去的,也没跟她好好聊聊。当时说的时候也没仔细想。当她那里已经睡了挺久,我偶然想起了今天的聊天内容,忽然有些想法想要她知道。

这是个聪慧的女子,她知道自己所求为何。然而,茫茫大千世界,随着她遇到的越来越多,尤其是她所不熟悉的人都在跟她说某些类似的思想的时候,她似乎正逐渐变的有些茫然,逐渐的对自己的想法不再那么的抱有强大的信心。

如今,既以哥们称,则我说的东西她会采纳一些。然而我自己却似乎做的有些不够好。没能及时的想到这层,则有些话我当笑话逗她,她却部分当了真。非我所愿。

聊天中提到的,那个曾经追求她的男生,现在发现他们并不合适,然后代之以哥们的身份与之交流。话里说到一点,希望她能变成“白顺乖”。

不可否认,这三个条件具备的话,估计会赢得大多数男生的喜欢,但喜欢这样的男生也会喜欢所有的白顺乖。

感情是为了让所有男生都喜欢吗?女生,是为了让男人们欢心吗?

感情是两个人的事,何必要那么多男生喜欢?担心你会因为这么一人的建议或说法胡乱的去改变自己,于是想问一句:你是想找一个喜欢白顺乖的男人,还是想找一个喜欢你的男人?

另:

吊丝是从D-吧发展出来的一种文化,或者说是一种亚文化,所为表达的是一些没钱没权没能力的人面对社会黑暗一面时,对自己的一种自嘲和心里深刻的自卑感。但这种文化发展的有些过于调侃,而少有正能量。女人用吊丝自称,在我心里常有不自重之感,望你慎用。

今天踢球左肩有点伤到,不爽。睡觉养之!

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

以上用例和详细介绍来自《http://www.blogjava.net/kxbin/articles/360195.html》