教为学:Oracle SQL学习之路(四):分析函数之统计(二)
前言
关于分析函数的博文我已经写了好几篇了。
可是一直对自己所写的东西不怎么满意,说不清楚问题具体在哪里,最大的问题就是我只是觉得不满意,却完全搞不清楚,自己不满意在哪里,该说清楚的没有说清楚?还是内容太过单薄。
MAX和MIN一看就知道什么意思。
SQL:
执行结果(节选):
MANAGER_ID |
MAX_SALARY |
100 |
17000 |
101 |
12008 |
102 |
9000 |
103 |
6000 |
108 |
9000 |
114 |
3100 |
120 |
3200 |
121 |
4200 |
122 |
3800 |
123 |
4000 |
124 |
3500 |
分析统计函数行数到底是由谁决定?
这个问题其实很大的程度上让初学者困惑,因为一般理论上,我们总觉得MAX就只有一个,为什么会有那么多?特别是在没有分组的情况下。
我们把上面的SQL改写一下。
结果:
MANAGER_ID |
MAX_SALARY |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
100 |
17000 |
好,我再改写一下SQL。
再上结果集:
MANAGER_ID |
100 |
100 |
100 |
100 |
100 |
100 |
100 |
100 |
100 |
100 |
100 |
100 |
100 |
要不要数一数行数。
你完全可以把分析函数看作强行加入一个SQL的外来者,这个外来者的数据必须按照规定服从原有数据。
也就是说,它的行数是由去掉的分析函数以后的SQL决定的。
Syntax
MAX
MIN
FIRST_VALUE
LAST_VALUE
用法都比较简单。
功能上,我个人认为MAX是FIRST_VALUE的一个子集。