您的位置:首页 > 数据库 > Oracle

教为学:Oracle SQL学习之路(四):分析函数之统计(二)

2014-09-02 00:00 357 查看

教为学:Oracle SQL学习之路(四):分析函数之统计(二)

前言

关于分析函数的博文我已经写了好几篇了。

可是一直对自己所写的东西不怎么满意,说不清楚问题具体在哪里,最大的问题就是我只是觉得不满意,却完全搞不清楚,自己不满意在哪里,该说清楚的没有说清楚?还是内容太过单薄。

MAX和MIN一看就知道什么意思。

SQL:

select
distinct manager_id,

max(salary) over(partition by manager_id ) as max_salary

from
employees order by manager_id;

执行结果(节选):

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改写一下。

select
manager_id,

max(salary) over(partition by manager_id ) as max_salary

from
employees

where
manager_id='100'

;

结果:

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。

select
manager_id

from
employees

where
manager_id='100'

;

再上结果集:

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的一个子集。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: