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

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

前言

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

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

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

SQL:

  1. select distinct manager_id,
  2.     max(salary) over(partition by manager_id ) as max_salary
  3. 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改写一下。

  1. select manager_id,
  2.     max(salary) over(partition by manager_id ) as max_salary
  3. from employees
  4. where manager_id='100'
  5. ;

结果:

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。

  1. select manager_id
  2. from employees
  3. where manager_id='100'
  4. ;

再上结果集:

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的一个子集。

原文地址:https://www.cnblogs.com/jiaoweixue/p/3114483.html